ListDiff 是 IGListKit 的 IGListDiff 的 Swift 移植版本。 它是对 Paul Heckel 算法的实现,用于计算两个数组之间的差异。
这个项目的动机来自于以下 挑战,我从 Ryan Nystrom 在 iOSConf.SG 上的 演讲中了解到了这个挑战。
swift package generate-xcodeproj
pod 'ListDiff'
github "lxcid/ListDiff" "master"
import ListDiff
extension Int : Diffable {
public var diffIdentifier: AnyHashable {
return self
}
}
let o = [0, 1, 2]
let n = [2, 1, 3]
let result = List.diffing(oldArray: o, newArray: n)
// result.hasChanges == true
// result.deletes == IndexSet(integer: 0)
// result.inserts == IndexSet(integer: 2)
// result.moves == [List.MoveIndex(from: 2, to: 0), List.MoveIndex(from: 1, to: 1)]
// result.changeCount == 4
在移植过程中,我做出了一些决定,我想在这里说明理由。
struct
,所以只有 List.Entry
是一个 (final) 类,因为我们需要引用它的实例。