web-dev-qa-db-fra.com

string array.Contains?

.NET 2

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

Comment vérifier si myStrings contient test?

19
serhio

Dans .NET 2.0, vous pouvez effectuer les opérations suivantes si vous souhaitez l'index:

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

index sera -1 si myStrings ne contient pas test.

Si vous voulez simplement vérifier l'existence:

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

J'ai trouvé une réponse élégante à la page ici http://www.dotnettoad.com/index.php?/archives/10-Array.Contains.html . Ce que vous devez faire dans .NET 2.0 est de convertir en IList et d’appeler la méthode Contains.

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

Voici une approche compatible .NET 2.0. Utiliser Array.Find renverra null si la valeur n'est pas trouvée.

Approche C #

string[] myStrings = { "A", "B", "testValue" };
string test = "testValue";
string result = Array.Find(myStrings, delegate(string s) { return s == test; });
Console.WriteLine("Result: " + result);

Si vous avez besoin d'une correspondance insensible à la casse, utilisez s.Equals(test, StringComparison.InvariantCultureIgnoreCase).

EDIT: avec VB.NET 2.0, des efforts supplémentaires sont nécessaires car ils ne prennent pas en charge les délégués anonymes. Au lieu de cela, vous devrez ajouter un Function et utiliser AddressOf pour le désigner. Vous devez définir la variable testValue en tant que membre ou propriété, car elle ne sera pas transmise à la méthode de prédicat. Dans l'exemple suivant, j'utilise Array.Exists.

Approche 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

Au lieu d'utiliser un tableau statique, vous pouvez utiliser une liste:

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

Je pensais en ajouter un autre, disponible d’abord dans .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;
}

Et cela aura la meilleure performance de tous les temps. : P

2
Vilx-

Voici presque la même question sur msdn . Rechercher une chaîne dans un tableau de chaînes Comme d’autres l'ont déjà dit, vous avez vraiment deux options: 1) Utilisez une liste pour une vérification plus facile. ) Parcourez votre tableau pour trouver la chaîne

1
Kyle C

vous pouvez utiliser Array.BinarySearch comme décrit ci-dessous.

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

Que dis-tu de ça:

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

Cela devrait fonctionner pour .Net 2.0 et VB.Net. 

0
Chris Dunaway