#vb.net #arguments
#vb.net #аргументы
Вопрос:
Я пытаюсь найти нужный индекс строки таблицы (ов). Сложность в том, что мне нужно проверить несколько значений, найденных в столбцах.
Например.
- Таблица 1 содержит 1 уникальный столбец
- В таблице 2 есть 2 столбца для поиска уникальной строки
- В таблице 3 есть 3 столбца для поиска уникальной строки
Я хотел бы, чтобы моя функция выполняла поиск по количеству заданных аргументов для столбцов. Но я не совсем знаю, как это сделать.
Я думал о передаче массива {"Value1", "Value2", "Value3"}
Но как я могу проверить на основе количества аргументов, совпадает ли строка?
Я думал о чем-то подобном, но, может быть, есть лучшее решение этой проблемы?
Private Function FindRow(ByVal StringArray As String()) As Integer
Dim NumberOfArguments As Integer = oStringArray.Length
Dim MatchesCount As Integer = 0
For i = 0 as integer to rows.count
For x = 0 as integer to columns.count
For y = 0 as integer to NumberOfArguments
If Row(i).Column(x).value = StringArray(y) Then
MatchesCount = 1
End If
Next
Next
If MatchesCount = NumberOfArguments Then
FindRow = i
End If
Next
End Function
Комментарии:
1. Если вы передаете 2 значения, вы хотите выполнить поиск только по первым 2 столбцам? Или возможно, что у вас есть 4 столбца, и вы передаете 2 значения и хотите сопоставить любые 2 столбца из 4?
2. можно иметь x количество столбцов и передать 2 значения, чтобы они соответствовали 2 столбцам.
3. Я думаю, что у @jmcilhinney есть правильная идея с ParamArray. Вы должны использовать сигнатуру его функции, но использовать свою логику
Ответ №1:
Private Function FindRowIndex(ParamArray values As String()) As Integer
For i = 0 To rows.Count - 1
Dim row = rows(i)
Dim match = True
For j = 0 To values.Length - 1
If Not row(j).Equals(values(j)) Then
match = False
Exit For
End If
Next
If match Then
Return i
Next
Next
Return -1
End Function
Поскольку параметр метода объявлен ParamArray
, вы можете вызвать его и передать несколько дискретных значений вместо того, чтобы создавать массив явно.