2010-04-05 6 views
14

Disons que j'ai une variable C# et tableau:Comparer une valeur à une matrice entière? (C#)

int variable_1 = 1; 
int[3] array_1 = {1,2,3}; 

Comment puis-je vérifier si la valeur de variable_1 est égale à l'une des valeurs dans array_1 sans boucle à travers array_1?

+4

En général, pour vérifier l'existence à l'intérieur d'une structure multi-valeur, il faudra une certaine quantité de la boucle. Si vous avez trouvé un goulot d'étranglement dans votre application (au moyen d'un profil) avec une boucle, vous pouvez ajouter un index pour le rendre plus rapide. Dans .NET, le moyen le plus facile d'accomplir ceci est probablement un dictionnaire ou HashSet. –

Répondre

26

bien quelque chose doit boucler. Une des conditions suivantes fonctionnera:

bool exists = array.Contains(variable_1); 
bool exists = Array.IndexOf(array_1, variable_1) != -1; 
bool exists = Array.Exists(array_1, x => x == variable_1); 
bool exists = Array.FindIndex(array_1, x => x == variable_1) != -1; 
bool exists = array_1.Any(x => x == variable_1); 

Toutes les versions en utilisant une expression lambda se sentir comme surpuissant pour moi, mais ils sont potentiellement utiles si vous vous trouvez dans une situation où vous ne connaissez pas la valeur réelle vous recherchez - juste une condition.

Si vous savez que le tableau est trié, vous pouvez utiliser:

bool exists = Array.BinarySearch(array_1, variable_1) >= 0; 

Ce sera O (log n) plutôt que O (n) (que tous les autres sont), mais il ne nécessite le tableau à trier en premier.

Personnellement, je vais normalement avec le tout premier formulaire - en supposant que vous utilisez .NET 3.5 ou supérieur.

Si vous devez vérifier plusieurs éléments et le tableau est grand, vous pouvez créer un HashSet<int>:

HashSet<int> hashSet = new HashSet<int>(array_1); 
bool exists = hashSet.Contains(variable_1); 
18

à 3,5 et jusqu'à

array_1.Contains(variable_1); 

ou 2,0

array_1.IndexOf(variable_1) != -1 

Mise à jour: faire des économies sur les performances

+6

Créer une nouvelle liste juste pour trouver une valeur me semble être trop compliqué. Même dans 2.0, vous pouvez utiliser Array.IndexOf, Array.Exists, Array.FindIndex etc –

+0

En effet! array_1.IndexOf (variable_1)! = -1 devrait faire le travail –

1

mmm il peut y avoir différentes options,

var hasItem = Array.Exists(array_1, x => x == variable_1); 
Questions connexes