El Comparador de Colecciones, Encontrando las Diferencias Entre Dos Colecciones
21 de julio de 2019 • 2 min de lectura

¿Has tenido que comparar dos colecciones y ejecutar alguna lógica basada en si el elemento está en la colección fuente, en la colección de comparación o en ambas? Sí, yo también, necesitaba fusionar datos de la UI y la base de datos. No pude encontrar una buena solución, así que escribí un comparador de colecciones.
Para ilustrar cómo funciona esto, veamos un ejemplo.
En los datos fuente tenemos los valores 1, 3, 4, 6, y en la
colección de comparación tenemos los valores 1, 2, 3, 4, 5.
A los datos fuente les faltan el 2 y el 5 cuando se comparan con la colección de comparación, y a la colección de comparación le falta el 6 cuando se compara con la colección fuente.
Veamos paso a paso esta fusión:
- en ambas (actualizar)
- solo en la colección de comparación (agregar a la fuente)
- en ambas (actualizar)
- en ambas (actualizar)
- solo en la colección de comparación (agregar a la fuente)
- solo en la colección fuente (eliminar de la fuente)
Así es como se ve el código:
var source = new []{1, 3, 4, 6};
var collection = new[] {1, 2, 3, 4, 5};
source.CompareTo(collection, (s, d) => s == d)
.OnlyInSourceCollection(s=> {/* hacer algo */})
.OnlyInComparingCollection(s=>{/* hacer algo */})
.InBoth(s=> {/*hacer algo*/})
.Process();
¿Por qué no usar LINQ?
Puedes usar LINQ, sin embargo, LINQ iterará las colecciones al menos 3 veces, lo cual no incluye operar (agregar, actualizar y eliminar) en los datos. Usando el CollectionComparer
, los datos solo se iteran dos veces.
Hay formas más rápidas de encontrar las diferencias como una búsqueda binaria, pero una búsqueda binaria solo funciona con enteros. El comparador de colecciones soporta cualquier tipo de comparación. La comparación se define con este código: (s, d) => s == d
.
El código fuente se encuentra en GitHub.
↑ Volver arribaTambién te puede gustar
- Modificar un Archivo Localmente Sin Actualizar el Repositorio Git Remoto 1 min de lectura
- Una Implementación de Búsqueda Binaria 1 min de lectura
- Los Beneficios de Usar un Framework de Construcción 2 min de lectura