Articles
Le comparateur de collection, trouver les différences entre deux collections
22 juillet 2019 • 2 min de lecture
Avez-vous dû comparer deux collections et exécuter une logique en fonction de si l’élément se trouve dans la collection source, dans la collection de comparaison ou dans les deux ? Oui, moi aussi, j’avais besoin de fusionner les données de l’interface utilisateur et de la base de données. Je n’ai pas trouvé de bonne solution, alors j’ai écrit un comparateur de collection.
Pour illustrer comment cela fonctionne, regardons un exemple.
Dans les données source, nous avons les valeurs 1, 3, 4, 6, et dans la
collection de comparaison, nous avons les valeurs 1, 2, 3, 4, 5.
Les données source manquent de 2 et 5 par rapport à la collection de comparaison, et la collection de comparaison manque de 6 par rapport à la collection source.
Parcourons cette fusion :
- dans les deux (mettre à jour)
- uniquement dans la collection de comparaison (ajouter à la source)
- dans les deux (mettre à jour)
- dans les deux (mettre à jour)
- uniquement dans la collection de comparaison (ajouter à la source)
- uniquement dans la collection source (supprimer de la source)
Voici à quoi ressemble le code :
var source = new []{1, 3, 4, 6};
var collection = new[] {1, 2, 3, 4, 5};
source.CompareTo(collection, (s, d) => s == d)
.OnlyInSourceCollection(s=> {/* do something */})
.OnlyInComparingCollection(s=>{/* do something */})
.InBoth(s=> {/*do something*/})
.Process();
Pourquoi ne pas utiliser LINQ ?
Vous pouvez utiliser LINQ, cependant, LINQ itérera les collections au moins 3 fois, ce qui n’inclut pas l’opération (ajout, mise à jour et suppression) sur les données. En utilisant CollectionComparer, les données ne sont itérées que deux fois.
Il existe des façons plus rapides de trouver les différences, comme une recherche binaire, mais une recherche binaire ne fonctionne qu’avec les entiers. Le comparateur de collection prend en charge tout type de comparaison. La comparaison est définie avec ce code : (s, d) => s == d.
Le code source se trouve sur GitHub.
Auteur : Chuck Conway est un ingénieur IA avec près de 30 ans d’expérience en génie logiciel. Il construit des systèmes IA pratiques — pipelines de contenu, agents d’infrastructure et outils qui résolvent des problèmes réels — et partage ce qu’il apprend en chemin. Connectez-vous avec lui sur les réseaux sociaux : X (@chuckconway) ou visitez-le sur YouTube et sur SubStack.