.NET 2
string[] myStrings = GetMyStrings();
string test = "testValue";
myStrings
にtest
が含まれているかどうかを確認するにはどうすればよいですか?
.NET 2.0では、インデックスが必要な場合は、次の操作を実行できます。
int index = Array.FindIndex(
myStrings,
delegate(string s) { return s.Equals(test); }
);
index
にmyStrings
が含まれていない場合、test
は-1
になります。
存在を確認するだけの場合:
bool exists = Array.Exists(
myStrings,
delegate(string s) { return s.Equals(test); }
);
このページ http://www.dotnettoad.com/index.php?/archives/10-Array.Contains.html でエレガントな答えを見つけました。 .NET 2.0では、IListにキャストしてContainsメソッドを呼び出す必要があります。
(IList<string> mystrings).Contains(test);
これが.NET 2.0準拠のアプローチです。 _Array.Find
_を使用すると、値が見つからない場合はnullが返されます。
C#アプローチ
_string[] myStrings = { "A", "B", "testValue" };
string test = "testValue";
string result = Array.Find(myStrings, delegate(string s) { return s == test; });
Console.WriteLine("Result: " + result);
_
大文字と小文字を区別しない一致が必要な場合は、s.Equals(test, StringComparison.InvariantCultureIgnoreCase)
を使用します。
編集: VB.NET 2.0では、匿名のデリゲートをサポートしていないため、さらに作業が必要です。代わりに、Function
を追加し、AddressOf
を使用してそれを指す必要があります。 testValue
は述語メソッドに渡されないため、メンバーまたはプロパティとして設定する必要があります。次の例では、_Array.Exists
_を使用します。
VB.NETアプローチ
_' field or property '
Dim test As String = "testValue"
Sub Main
Dim myStrings As String() = { "A", "B", "testValue" }
Dim result As Boolean = Array.Exists(myStrings, AddressOf ContainsValue)
Console.WriteLine(result)
End Sub
' Predicate method '
Private Function ContainsValue(s As String) As Boolean
Return s = test
End Function
_
静的配列を使用する代わりに、リストを使用できます。
List<string> myStrings = new List<string>(GetMyStrings());
if(myStrings.Contains("testValue"))
{
// Do Work
}
最初に.NET 3.5で利用可能になったミックスに別のものを追加すると思いましたが、
Enumerable.Contains(myStrings.ToArray(), test)
bool ContainsString(string[] arr, string testval)
{
if ( arr == null )
return false;
for ( int i = arr.Length-1; i >= 0; i-- )
if ( arr[i] == testval )
return true;
return false;
}
そして、これはこれまでで最高のパフォーマンスになります。 :P
Msdnとほぼ同じ質問です。 文字列配列内の文字列を検索 他の人が言ったように、実際には2つのオプションがあります:1)リストを使用してチェックを簡単にする2)配列をループして文字列を見つける
以下で説明するように、Array.BinarySearchを使用できます。
string[] strArray = GetStringArray();
string strToSearch ="test";
Array.BinarySearch(strArray, strToSearch);
これはどう:
Sub Main
Dim myStrings(4) As String
myStrings(0) = "String 1"
myStrings(1) = "String 2"
myStrings(2) = "testValue"
myStrings(3) = "String 3"
myStrings(4) = "String 4"
Dim test As String = "testValue"
Dim isFound As Boolean = Array.IndexOf(myStrings, test) >= 0
If isFound Then
Console.WriteLine("Found it!")
End If
End Sub
これは、.Net 2.0およびVB.Netで機能するはずです。