Para mi primera publicación aquí, tengo una pregunta sobre la comparación de IEnumerable. Tengo una estructura enlazable basada en una lógica de enumeración. El contenido de IEnumerable cambia con el tiempo y tengo que activar manualmente los eventos CollectionChanged.Comparando dos IEnumerable para detectar cambios
Tengo un algoritmo muy ingenuo que me permite detectar cambios simples entre dos estados de IEnumerable (simple, simple, múltiple, múltiple) pero no es muy eficiente y no detecta todo.
Un ejemplo rápido de lo que necesito:
estado 1 de la IEnumerable: A * B * C * D * E
2 del estado de la IEnumerable: A * C * B * D * D1
para este ejemplo, tendría que detectar
- Una operación de movimiento: B cambió índice desde 1 hasta 2
- Una operación Añadir: D1 se insertó en el índice 4
- Una operación de eliminación: E se eliminó
¿Existe un algoritmo para resolver este problema tan eficientemente como sea posible (O (n log (n)) sería un buen comienzo)?
Gracias!
¿B se movió del índice 1 -> 2 o C se movió de 2 -> 1? ¿o ambos? –
Si el estado 1 es 'A B' y el estado 2 es' B A A', ¿se agregaron dos elementos, o se agregó uno y se movió uno? Si 'A' se movió, ¿a dónde se movió? – Jon
@JamesB: B movido desde el índice 1 -> ¡2 información debería ser suficiente! – Sisyphe