2009-03-28 32 views
-1

私はindex = Array.IndexOf(_arrayName、 "Text")の配列コードを検索していました。私は十分な言葉を与えるこれは適切に動作します。これは動作していないいくつかの文字を与える。例えば、ここに検索配列

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

のために私は、そのコードの復帰1. 「somu」を与えるが、私はそのコード・リターン「ので」-1与えます。 しかし、私は好きな検索したい。 これは可否です。

答えて

8

IndexOfは完全一致を検索します。あなたが仕事をしたい配列がある最初のもの

Array.FindIndexは、2つの引数を取り、:Function(s)とラムダを明確にするために

// 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)) 

編集:一致条件をカスタマイズするには、FindIndexメソッドを使用することができます後者は、検査する述部を表すDelegateです。

FindIndexは、どのような種類の要素が必要なのか分かりません。それはあなたにそれを指定する柔軟性を与えます。あなたは、配列要素を受け取り、それを望むかどうかを示すブール値を返す関数を渡すことによってそれを伝えます。 配列のすべての要素でその関数を呼び出し、その関数がtrueを返す最初の要素のインデックスを返します。

を使用すると、関数全体を書き込みしてAddressOf MyPredicateを使用する代わりに、簡単に使用できます。私たちは、そのメソッドにアクセスできるinputStringどこかに保存しなければならなかった、ということでした場合はもちろん

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

Array.FindIndex(arr, AddressOf MyPredicate) 

:それはと同等です。それは汚いコードの多くです。ラムダ式は、これらの面倒をすべて軽減します。

編集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

haiのこの機能(複数可)は何か。 – somu

+0

関数はラムダ(インライン関数)を宣言します。 Essentialy '関数s.Contains(inputString)'は 's'を取得し、' s.Contains(inputString) 'を返す関数を意味します。コードを乱雑にして大きな関数を宣言するのではなく、インラインで記述してメソッドに渡すだけです。 –

+0

大丈夫です。 しかし、私は "so"関数を返します0を返します。 somuには "だから"大丈夫が含まれているので1が欲しいです。ありがとうございます – somu