私はindex = Array.IndexOf(_arrayName、 "Text")の配列コードを検索していました。私は十分な言葉を与えるこれは適切に動作します。これは動作していないいくつかの文字を与える。例えば、ここに検索配列
dim arr() as string ={"ravi","somu","arul"}
のために私は、そのコードの復帰1. 「somu」を与えるが、私はそのコード・リターン「ので」-1与えます。 しかし、私は好きな検索したい。 これは可否です。
私はindex = Array.IndexOf(_arrayName、 "Text")の配列コードを検索していました。私は十分な言葉を与えるこれは適切に動作します。これは動作していないいくつかの文字を与える。例えば、ここに検索配列
dim arr() as string ={"ravi","somu","arul"}
のために私は、そのコードの復帰1. 「somu」を与えるが、私はそのコード・リターン「ので」-1与えます。 しかし、私は好きな検索したい。 これは可否です。
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
haiのこの機能(複数可)は何か。 – somu
関数はラムダ(インライン関数)を宣言します。 Essentialy '関数s.Contains(inputString)'は 's'を取得し、' s.Contains(inputString) 'を返す関数を意味します。コードを乱雑にして大きな関数を宣言するのではなく、インラインで記述してメソッドに渡すだけです。 –
大丈夫です。 しかし、私は "so"関数を返します0を返します。 somuには "だから"大丈夫が含まれているので1が欲しいです。ありがとうございます – somu