Maison >développement back-end >C++ >Comment puis-je trouver efficacement les différences entre deux très grandes listes ?
Supposons que vous ayez deux listes géantes contenant plus de 50 000 éléments et que vous ayez besoin de trouver les différences entre elles. Plus précisément, vous avez besoin de deux listes : une contenant les éléments présents dans la première liste mais pas dans la seconde, et une contenant les éléments présents dans la deuxième liste mais pas dans la première.
Une approche courante consiste à utiliser une requête LINQ, comme indiqué dans la question. Cependant, cette approche est inefficace pour les grandes listes.
Solution d'optimisation utilisant la méthode Except
Pour améliorer les performances, vous pouvez utiliser la méthode Except :
<code>var firstNotSecond = list1.Except(list2).ToList(); var secondNotFirst = list2.Except(list1).ToList();</code>
La méthode Except calcule efficacement la différence définie entre deux séquences, fournissant le résultat souhaité en un temps O(n), où n est la longueur de la plus grande liste. C'est beaucoup plus rapide que l'approche O(N*M) utilisée dans les requêtes LINQ.
Combinaison des résultats et gestion des doublons
Si vous devez combiner les résultats, vous pouvez créer une méthode qui renvoie vrai si aucune des deux listes ne contient de différence. Notez que contrairement au code d'origine, cette méthode ne signalera les éléments en double qu'une seule fois dans une seule liste.
<code>return !firstNotSecond.Any() && !secondNotFirst.Any();</code>
Conclusion
L'utilisation de la méthode Except offre un moyen plus rapide et plus économe en ressources de comparer les différences dans de grandes listes génériques, résolvant ainsi les problèmes de performances soulevés dans la question.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!