ListDiff
0.0.1
Un algoritmo ligero de diferencia O(n) basado en el algoritmo de Paul Heckel. Se basa en la colección Bidireccional genérica y proporciona soporte amigable para la API basada en UIKit.
Puede clonar este repositorio y ejecutar ListDiffExample
para ver la animación de la vista de colección proporcionada por ListDiff.
print ( ListDiff . diffing ( oldData : " laksjdzcxlkawiey " , newData : " xclvkbyoieuwyrck " ) )
collectionView . animateItemChanges ( oldData : oldData , newData : newData ) {
dataSource = newData
}
Comparando con la diferencia de colección de Swift
Algoritmo básico | Orden | 500 elementos | 10.000 elementos | |
---|---|---|---|---|
ListaDiff | Heckel | EN) | 0.0037s | 0.0736s |
Swift.CollectionDiferencia | miers | O(ND) | 0.0112s | 4.7747s |
El punto de referencia se puede ver aquí.
$ swift run -c release ListDiffBenchmark
name time std iterations
----------------------------------------------------------------------------
ListDiff 500 elements 3719045.000 ns ± 11.13 % 377
ListDiff 10,000 elements 73628145.000 ns ± 1.01 % 17
CollectionDifference 500 elements 11225107.000 ns ± 4.66 % 120
CollectionDifference 10,000 elements 4774718233.000 ns ± 0.67 % 2
Seleccione el menú Xcode File > Swift Packages > Add Package Dependency
e ingrese la URL del repositorio con GUI.
Repository: https://github.com/zzzzeu/ListDiff
Agregue lo siguiente a las dependencias de su Package.swift
:
. package ( url : " https://github.com/zzzzeu/ListDiff.git " , from : " 0.0.1 " )