Таблица поиска с x количеством аргументов

#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 , вы можете вызвать его и передать несколько дискретных значений вместо того, чтобы создавать массив явно.