web-dev-qa-db-ja.com

文字列array.Contains?

.NET 2

string[] myStrings = GetMyStrings();    
string test = "testValue";

myStringstestが含まれているかどうかを確認するにはどうすればよいですか?

20
serhio

.NET 2.0では、インデックスが必要な場合は、次の操作を実行できます。

int index = Array.FindIndex(
    myStrings,
    delegate(string s) { return s.Equals(test); }
);

indexmyStringsが含まれていない場合、test-1になります。

存在を確認するだけの場合:

bool exists = Array.Exists(
    myStrings,
    delegate(string s) { return s.Equals(test); }
);
18
jason

このページ http://www.dotnettoad.com/index.php?/archives/10-Array.Contains.html でエレガントな答えを見つけました。 .NET 2.0では、IListにキャストしてContainsメソッドを呼び出す必要があります。

(IList<string> mystrings).Contains(test);
11
oldbam

これが.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
_
10
Ahmad Mageed

静的配列を使用する代わりに、リストを使用できます。

List<string> myStrings = new List<string>(GetMyStrings());
if(myStrings.Contains("testValue"))
{
    // Do Work
}
9
Justin Niessner

最初に.NET 3.5で利用可能になったミックスに別のものを追加すると思いましたが、

Enumerable.Contains(myStrings.ToArray(), test)
7
bLiTzJoN
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

2
Vilx-

Msdnとほぼ同じ質問です。 文字列配列内の文字列を検索 他の人が言ったように、実際には2つのオプションがあります:1)リストを使用してチェックを簡単にする2)配列をループして文字列を見つける

1
Kyle C

以下で説明するように、Array.BinarySearchを使用できます。

 string[] strArray = GetStringArray();
        string strToSearch ="test";
        Array.BinarySearch(strArray, strToSearch);
1
TalentTuner

これはどう:

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で機能するはずです。

0
Chris Dunaway