Quelle serait la meilleure façon de regarder dans un string[]
pour voir s'il contient un élément. C'était ma première chance. Mais il y a peut-être quelque chose que je néglige. La taille du tableau ne dépassera pas 200 éléments.
bool isStringInArray(string[] strArray, string key)
{
for (int i = 0; i <= strArray.Length - 1; i++)
if (strArray[i] == key)
return true;
return false;
}
(new string[] { "foo", "bar" }).Contains("foo")
new[] { "foo", "bar" }.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 méthodes génériques et d'extension.
Vous pouvez lire mon article de blog pour voir plus d'informations sur la façon de procéder, mais l'idée principale est la suivante:
En ajoutant cette méthode d'extension à votre code:
vous pouvez effectuer votre recherche comme ceci:
Cela fonctionne sur n'importe quel type (tant que vous créez une bonne méthode d'égalité). Tout type de valeur à coup sûr.
la source
var xxx = csvData.Rows[0].ItemArray[0].IsIn(".00", "0.0", ".25", "0.5", ".5", ".50", ".75");
ce que je veux faire est de regarder à travers le qui datable dans la première colonne pour voir si les valeurs ne se terminent par aucune des chaînes suivantes .. si ce n'est pas le cas, je veux renvoyer une chaîne indiquant que il manque une valeur,.00
par exemple en utilisant votre exemple, je n'arrive pas à faire fonctionner celui-ci, c'est un peu plus délicat car je ne veux pas renvoyer un booléen J'ai modifié votre méthode pour renvoyer une chaîne mais ne fonctionne toujours pas de suggestionspublic static bool EndWithValue(this string value, IEnumerable<string> values) { return values.Any(item => value.EndsWith(item)); }
Vous recherchez simplement 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).
la source
Linq (pour les s & g):
ou, selon les besoins
la source
Le tableau est-il trié? Si c'est le cas, vous pouvez faire une recherche binaire . Voici également l'implémentation .NET. Si le tableau est trié, une recherche binaire améliorera les performances par rapport à toute solution itérative.
la source
Les tableaux sont, en général, une structure de données médiocre à utiliser si vous souhaitez demander si un objet particulier est dans la collection ou non.
Si vous exécutez cette recherche fréquemment, cela peut valoir la peine d'utiliser un
Dictionary<string, something>
tableau 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 un grand nombre de ces recherches, le dictionnaire sera probablement plus rapide.
la source
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 chère que la simple boucle.
la source
Comme mentionné à plusieurs reprises dans le fil ci-dessus, cela dépend du cadre utilisé. .Net Framework 3 et supérieur 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 parcourir un tableau ...
Pas trop sûr de l'efficacité ... Dave
la source
C'est plus rapide que d'itérer manuellement dans le tableau:
la source
Si vous ne voulez pas ou ne pouvez tout simplement pas utiliser Linq, vous pouvez également utiliser la
Array.Exists(...);
fonction statique :https://msdn.microsoft.com/en-us/library/yw84x8be%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396
Lorsque le prédicat retourne true une fois, catInside sera également vrai.
la source