Comment vérifier si un tableau contient un élément d’un autre tableau

Avec 2 tableaux int par exemple, foo et bar , quel est le moyen le plus efficace de vérifier que la barre de tableau contient au moins un élément que foo contient. devrait retourner vrai / faux.

Je soupçonne nested foreach mais je me demandais s’il y a une meilleure façon?

Utiliser LINQ:

 array1.Intersect(array2).Any() 

Remarque: L’utilisation de Any() garantit que l’algorithme d’intersection s’arrête lorsque le premier object égal est trouvé.

C # 3:

 bool result = bar.Any(el => foo.Contains(el)); 

Exécution parallèle C # 4:

 bool result = bar.AsParallel().Any(el => foo.AsParallel().Contains(el)); 

Oui, les boucles nestedes, bien que l’une soit masquée:

 bool AnyAny(int[] A, int[]B) { foreach(int i in A) if (B.Any(b=> b == i)) return true; return false; } 

Pour l’approche aléatoire à un tir, votre méthode semble être la plus rapide. Il y a des méthodes qui rendraient le processus plus efficace si une ou les deux masortingces sont sortingées, leurs limites supérieure / inférieure sont connues, ou l’une change plus rarement que l’autre et vous effectuez de nombreuses vérifications. En d’autres termes, vous pouvez préparer différents hachages, indices et astuces pour optimiser la recherche à peu près, mais le processus d’indexation seul nécessite généralement plus d’une recherche.

Une autre solution:

 var result = array1.Any(l2 => array2.Contains(l2)) == true ? "its there": "not there"; 

Si vous avez une classe au lieu de types de données intégrés comme int etc, vous devez alors remplacer l’implémentation Override Equals et GetHashCode pour votre classe.