FastDiff 1.1.1

FastDiff 1.1.1

Vijaya P. Kandel 维护。



FastDiff 1.1.1

  • 作者:
  • Vijaya Prakash Kandel



Fast Diff CI status

通用目的,快速差异算法支持 [m] 级嵌套差异。

时间复杂度

  • 线性 [O(n)]

为什么?

  1. 比主流算法更快。大多数差异算法是 O(nlogn) 或 O(n.m)。此算法是线性的 (O(n))。
  2. 大多数算法解决最小公共子序列问题,实现起来很难理解。这个算法只用了 6 次简单的循环遍历。
  3. 支持嵌套差异(如果您需要)

安装

通过 Cocoapods

pod 'FastDiff'

然后在终端中执行 pod update。如果您是 Cocoapods 新用户,请查看 Cocoapods 安装

通过 Swift Package Manager

在 swift Package.swift 文件中声明依赖项,如这样

dependencies: [
  ///.... other deps
  .package(url: "https://www.github.com/kandelvijaya/FastDiff", from: "1.0.0"),
]

执行更新命令 swift package update,然后 swift package generate-xcodeproj

运行测试

转到源目录,并运行

$ swift test

用法

算法 & 验证

let oldModels = ["apple", "microsoft"]
let newModels = ["apple", "microsoft", "tesla"]


/// Algorithm
let changeSet = diff(oldModels, newModels)
// [.addition("tesla", at: 2)]


/// Verification
oldModels.merged(with: changeSet) == newModels 
// true


请注意,`diff` 通常会产生无法直接合并到旧集合中的更改集,大多数情况下需要 `ordered` 才能成功地合并。如果你想将更改集应用到 `UITableView` 或 `UICollectionView`,这也很有用。

let chnageSet = diff(["A","B"], [“C”,"D"])
// [.delete("A",0), .delete("B",1), .add("C",0), .add(“D",1)]

let orderedChangeSet = orderedOperation(from: changeSet)
// [.delete("b",1), .delete("a",0), .add("c",0), .add("d",1)]

iOS 列表视图控制器中的概念和高级使用

请查看我在 @mobiconf 2018 上提供的这份演示文稿

贡献

欢迎使用Pull Requests贡献代码。如果您需要更多功能、发现bug或者想提出新想法,请自由地提交issue。

潜在任务

  • 查看问题部分,了解更多有助于完成任务和描述。这是一个开始贡献的好地方。

作者

  1. @kandelvijaya (https://twitter.com/kandelvijaya)

许可证

该项目遵循MIT许可证 - 详细信息请查看LICENSE.md文件。

鸣谢

  • 受Paul Heckel的论文和算法启发