ListDiff
0.0.1
Облегченный алгоритм разности O(n), основанный на алгоритме Пола Хеккеля. Он основан на универсальной BidirectionCollection и обеспечивает удобную поддержку API на основе UIKit.
Вы можете клонировать этот репозиторий и запустить ListDiffExample
чтобы увидеть анимацию представления коллекции, предоставляемую ListDiff.
print ( ListDiff . diffing ( oldData : " laksjdzcxlkawiey " , newData : " xclvkbyoieuwyrck " ) )
collectionView . animateItemChanges ( oldData : oldData , newData : newData ) {
dataSource = newData
}
По сравнению с Swift CollectionDifference
Базовый алгоритм | Заказ | 500 элементов | 10 000 элементов | |
---|---|---|---|---|
ListDiff | Хекель | НА) | 0.0037s | 0.0736s |
Swift.CollectionDifference | Майерс | О (НД) | 0.0112s | 4.7747s |
Бенчмарк можно увидеть здесь.
$ 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
Выберите меню Xcode File > Swift Packages > Add Package Dependency
и введите URL-адрес репозитория с графическим интерфейсом.
Repository: https://github.com/zzzzeu/ListDiff
Добавьте следующее в зависимости вашего Package.swift
:
. package ( url : " https://github.com/zzzzeu/ListDiff.git " , from : " 0.0.1 " )