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.