2009-03-28 1 views
-1

Hai Я использовал поиск кода массива для индекса = Array.IndexOf (_arrayName, «Text»). Я даю полное слово. Это работает правильно. но дать некоторые характер, это не работает. напримерПоиск в массиве

dim arr() as string ={"ravi","somu","arul"} 

здесь я дать «Somu», что код возврата 1. но я дать «так», что код возврата -1. но я хочу как поиск. это сноска или нет.

ответ

8

IndexOf ищет точное совпадение. Чтобы настроить критерии соответствия, вы можете использовать FindIndex метод:

// Finds first element of the array that contains `inputString` 
Array.FindIndex(arr, Function(s) s.Contains(inputString)) 

// Finds first element of the array that begins with `inputString` 
Array.FindIndex(arr, Function(s) s.StartsWith(inputString)) 

Edit для уточнения Function(s) и лямбды:

Array.FindIndex принимает два аргумента, первый из которых является массивом вы хотите работать , последний - Delegate, представляющий предикат для проверки.

FindIndex не имеет никакого представления о том, какой элемент вы хотите. Это дает вам возможность указать его. Вы рассказываете об этом, передавая функцию, которая принимает элемент массива и возвращает логическое значение, указывающее, хотите вы этого или нет. Он по сути вызывает эту функцию с каждым элементом массива и возвращает индекс первого элемента, для которого эта функция возвращает true.

Вместо того чтобы писать целую функцию и передавать ее с использованием AddressOf MyPredicate, мы можем легко использовать Function(s) s.Contains(inputString). Это эквивалентно:

Function MyPredicate(s As String) As Boolean 
    Return s.Contains(inputString) 
End Function 

Array.FindIndex(arr, AddressOf MyPredicate) 

Конечно, если бы мы сделали это, мы должны были хранить inputString где-то доступным для этого способом. Много грязного кода. Выражение лямбда уменьшает все эти неприятности.

Edit 2:

я могу проверить этот код печатает "1":

Module Module1 
    Sub Main() 
     Dim arr() As String = {"ravi", "somu", "arul"} 
     Console.WriteLine(Array.FindIndex(arr, Function(s) s.Contains("so"))) 
    End Sub 
End Module 
+0

хаи, что эта функция (s). – somu

+0

Функция (ы) объявляет лямбда (встроенная функция). Essentialy 'Function (s) s.Contains (inputString)' означает функцию, которая получает 's' и возвращает' s.Contains (inputString) '. Вместо того, чтобы загромождать код и объявлять большую функцию, вы просто пишете его inline и передаете его методу. –

+0

ОК, я понял. но я передаю «так», что функция возвращает 0 Я хочу 1, потому что somu включить «Так» хорошо. Спасибо вам – somu