Comment vérifier si une valeur est dans un tableau en C #?
Comme, je veux créer un tableau avec une liste de noms d'imprimantes.
Celles-ci seront transmises à une méthode, qui examinera chaque chaîne tour à tour, et si la chaîne est identique à une valeur dans un tableau, effectuez cette action.
Par exemple:
string[] printer = {"jupiter", "neptune", "pangea", "mercury", "sonic"};
foreach (p in printer)
{
PrinterSetup(p);
}
Ce sont les noms des imprimantes, ils sont alimentés par la méthode PrinterSetup.
PrinterSetup ressemblera à ceci (un pseudocode):
public void PrinterSetup(printer)
{
if (printer == "jupiter")
{
Process.Start("BLAH BLAH CODE TO ADD PRINTER VIA WINDOWS EXEC");
}
}
Comment formater if (printer == "jupiter")
d'une manière que C # peut reconnaître?
printer.Equals("jupiter")
. Si c'est l'ancien, utilisezlinq
etprinter.Contains("jupiter")
printer.Equals("jupiter")
... Le code de l'OPif (printer == "jupiter")
fonctionne très bien ... tant qu'ilprinter
est déclaré être une chaîne, comme le note Skeet.Réponses:
Ajouter l'espace de noms nécessaire
Ensuite, vous pouvez utiliser la
Contains()
méthode linqla source
How do I check if a value is in an array in C#?
) et aussi efficace. Pas de boucle, pas de méthode supplémentaire. Juste un espace de noms est supplémentaire, ce qui n'est pas une grande chose.((IList)printer).Contains("Jupiter")
ce qui est non générique (peut boxer les types de valeur, etc.) et fonctionne même pour les tableaux multidimensionnels. Et depuis .NET 2.0, nous avons le plus magique((IList<string>)printer).Contains("Jupiter")
qui est le plus sûr de type. L'approche Linq était nouvelle dans .NET 3.5.1) Vrai 2) Faux 3) Vrai 4) Faux
la source
la source
Quelque chose comme ça?
la source
la source
a
s'agit d'un tableau multidimensionnel (commenew string[10, 20, 15]
par exemple), avec une exception. Il échouera également avec des tableaux unidimensionnels qui ne sont pas indexés à partir de zéro (commeArray.CreateInstance(typeof(string), new[] { 5, }, new[] { -2, })
, rare en C #, je l'admets), avec une valeur de retour éventuellement incorrecte. Ces lacunes sont faciles à corriger avec des génériques:public static bool Contains<TElement>(TElement[] a, TElement val) { return Array.IndexOf(a, val) != -1; }
Remarque: la question concerne les tableaux de chaînes. Les routines mentionnées ne doivent pas être mélangées avec la méthode .Contains des chaînes simples.
Je voudrais ajouter une réponse étendue faisant référence à différentes versions de C # et pour deux raisons:
La réponse acceptée nécessite Linq qui est parfaitement idiomatique C # alors qu'il n'est pas gratuit et n'est pas disponible en C # 2.0 ou inférieur. Lorsqu'un tableau est impliqué, les performances peuvent être importantes, il existe donc des situations dans lesquelles vous souhaitez rester avec les méthodes Array.
Aucune réponse ne répond directement à la question où il a également été demandé de mettre cela dans une fonction (comme certaines réponses mélangent également des chaînes avec des tableaux de chaînes, ce n'est pas complètement sans importance).
Array.Exists () est une méthode C # /. NET 2.0 et n'a pas besoin de Linq. La recherche dans les tableaux est O (n). Pour un accès encore plus rapide, utilisez HashSet ou des collections similaires.
Depuis .NET 3.5, il existe également une méthode générique
Array<T>.Exists()
:Vous pouvez écrire une propre méthode d'extension (C # 3.0 et supérieur) pour ajouter le sucre syntaxique pour obtenir le même / similaire ".Contains" que pour les chaînes de tous les tableaux sans inclure Linq:
Dans ce cas, cette
ArrayContains()
méthode est utilisée et non la méthode Contains de Linq.Les méthodes .Contains mentionnées ailleurs font référence à
List<T>.Contains
(depuis C # 2.0) ouArrayList.Contains
(depuis C # 1.1), mais pas aux tableaux lui-même directement.la source
Il vous manque juste quelque chose dans votre méthode:
Ajoutez simplement
string
et tout ira bien.la source
Le problème n'est pas très clair, mais il semble que vous vouliez quelque chose comme ceci:
la source
Envisagez d'utiliser
HashSet<T>
Class pour des raisons de performances de recherche:Par exemple:
la source
J'ai cherché maintenant plus de 2h pour trouver un bon moyen de trouver des doublons dans une liste et comment les supprimer . Voici la réponse la plus simple:
La sortie ressemblera à ceci: Les éléments dupliqués seront supprimés dans la nouvelle liste appelée distinct!
la source