La chaîne est-elle dans le tableau?

Quelle serait la meilleure façon de regarder une ssortingng[] pour voir si elle contient un élément. C’était mon premier coup à cela. Mais peut-être y a-t-il quelque chose que je néglige. La taille du tableau ne sera pas supérieure à 200 éléments.

 bool isSsortingngInArray(ssortingng[] strArray, ssortingng key) { for (int i = 0; i <= strArray.Length - 1; i++) if (strArray[i].ToString() == key) return true; return false; } 

Utilisez simplement la méthode Contains () déjà intégrée:

 using System.Linq; //... ssortingng[] array = { "foo", "bar" }; if (array.Contains("foo")) { //... } 

Je sais que c’est vieux, mais je voulais que les nouveaux lecteurs sachent qu’il existe une nouvelle méthode pour le faire en utilisant des génériques et des méthodes d’extension.

Vous pouvez lire l’article sur mon blog pour plus d’informations sur la manière de procéder, mais l’idée principale est la suivante:

En ajoutant cette méthode d’extension à votre code:

 public static bool IsIn(this T source, params T[] values) { return values.Contains(source); } 

vous pouvez effectuer votre recherche comme ceci:

 ssortingng myStr = "str3"; bool found = myStr.IsIn("str1", "str2", "str3", "str4"); 

Cela fonctionne sur n’importe quel type (du moment que vous créez une méthode de qualité égale). Tout type de valeur à coup sûr.

Vous êtes simplement après la fonction Array.Exists (ou la méthode d’extension Contains si vous utilisez .NET 3.5, ce qui est légèrement plus pratique).

Linq (pour s & g’s):

 var test = "This is the ssortingng I'm looking for"; var found = strArray.Any(x=>x == test); 

ou, selon les besoins

 var found = strArray.Any( x=>x.Equals(test, SsortingngComparison.OrdinalIgnoreCase)); 

Le tableau est-il sortingé? Si oui, vous pouvez faire une recherche binary . Voici l’implémentation .NET. Si la masortingce est sortingée, une recherche binary améliorera les performances par rapport à toute solution itérative.

Les tableaux sont en général une mauvaise structure de données à utiliser si vous voulez demander si un object particulier est dans la collection ou non.

Si vous lancez cette recherche fréquemment, cela peut valoir la peine d’utiliser un Dictionary plutôt qu’un tableau. Les recherches dans un dictionnaire sont O (1) (temps constant), tandis que la recherche dans le tableau est O (N) (prend un temps proportionnel à la longueur du tableau).

Même si le tableau ne contient que 200 éléments au maximum, si vous effectuez beaucoup de recherches, le dictionnaire sera probablement plus rapide.

Vous pouvez également utiliser LINQ pour parcourir le tableau. ou vous pouvez utiliser la méthode Find qui prend un délégué pour le rechercher. Cependant, je pense que la méthode de recherche est un peu plus coûteuse que la simple boucle.

Comme mentionné à plusieurs resockets dans le fil ci-dessus, cela dépend du cadre utilisé. .Net Framework 3 et ci-dessus a les méthodes .Contains () ou Exists () pour les tableaux. Pour les autres frameworks ci-dessous, vous pouvez faire l’astuce suivante au lieu de faire une boucle à travers un tableau …

 ((IList)"Your Ssortingng Array Here").Contains("Your Search Ssortingng Here") 

Pas trop sur l’efficacité … Dave

C’est plus rapide que de parcourir manuellement le tableau:

 static bool isSsortingngInArray(ssortingng[] strArray, ssortingng key) { if (strArray.Contains(key)) return true; return false; } 

Si vous ne voulez pas ou ne pouvez pas simplement utiliser Linq, vous pouvez également utiliser le Array.Exists(...); statique Array.Exists(...); fonction:

https://msdn.microsoft.com/en-us/library/yw84x8be%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396

 var arr = new ssortingng[]{"bird","foo","cat","dog"}; var catInside = Array.Exists( arr, // your Array (s)=>{ return s == "cat"; } // the Predicate ); 

Lorsque le prédicat retourne vrai une fois que catInside sera également vrai.