Per il mio primo post qui, ho una domanda riguardante il confronto IEnumerable. Ho una struttura bindable basata su una logica di enumerazione. Il contenuto di IEnumerable cambia nel tempo e devo attivare manualmente gli eventi CollectionChanged.Confronto di due IEnumerable per rilevare le modifiche
Ho un algoritmo molto ingenuo che mi consente di rilevare semplici cambiamenti tra due stati dell'IEnumerable (semplice aggiunta, rimozione semplice, aggiunta multipla, rimozione multipla) ma non è molto efficiente e non rileva tutto.
un rapido esempio di che cosa ho bisogno:
stato 1 del IEnumerable: A * B * C * D * E
Stato 2 del IEnumerable: A * C * B * D * D1
per questo esempio, avrei rilevare
- un'operazione di spostamento: B cambiato index dal 1 al 2
- Un'operazione Add: D1 è stato inserito all'indice 4
- Un'operazione di cancellazione: E stato rimosso
Esiste un algoritmo per risolvere questo problema nel modo più efficiente possibile (O (nCollegatevi (n)) sarebbe un buon inizio)?
Grazie!
ha spostato B dall'indice 1 -> 2 o C è stato spostato da 2 -> 1? o entrambi? –
Se lo stato 1 è 'A B' e lo stato 2 è' B A A', sono stati aggiunti due elementi o uno aggiunto e uno spostato? Se si è mosso 'A', dove si è trasferito? – Jon
@JamesB: B spostato dall'indice 1 -> 2 le informazioni dovrebbero essere sufficienti! – Sisyphe