| 测试测试 | ✓ |
| 语言语言 | SwiftSwift |
| 许可 | MIT |
| 发布最新版本 | 2017年10月 |
| SwiftSwift 版本 | 4.0 |
| SPM支持构建日期包 | ✓ |
由 Hironori Ichimiya 维护。
Diffitic 是一个用 Swift 编写的检测两个序列之间差异的模块。
此模块提供了一个名为 diff 的函数。
public func diff(leftCount: Int,
rightCount: Int,
equalityChecker: (Int, Int) -> Bool)
-> [(DiffType, Int, Int, Int, Int)]它接受两个整数参数和一个闭包参数。
两个整数分别代表“左序列”和“右序列”的长度。
闭包接受“左序列”和“右序列”的索引,然后返回指定的两个索引元素是否相同。
diff 不关心这两组序列实际的数据类型。
以下是一个示例,演示序列是字符串数组。
import Foundation
import Diffitic
let left = ["dog", "cat", "cow", "sparrow", "swift"]
let right = ["horse", "dog", "cat", "cow", "koala", "swift"]
let result = diff(leftCount: left.count, rightCount: right.count) { (leftIndex, rightIndex) in
return left[leftIndex] == right[rightIndex]
}diff 函数的返回值是一个由段组成的数组。
一个段由五个值组成的元组表示:type、leftIndex、leftCount、rightIndex 和 rightCount。leftIndex 和 leftCount 指向左序列的一部分。
同样适用于右序列的 rightIndex 和 rightCount。type 表示段的类型。
类型 |
描述 |
|---|---|
.identical |
序列的两部分相同。 |
.inserted |
右部分被插入。 |
.deleted |
左部分被删除。 |
.replaced |
左部分被右部分替换。 |
在本例中,result 由以下四个段组成
(.inserted, 0, 0, 0, 1)(.identical, 0, 3, 1, 3)(.replaced, 3, 1, 4, 1)(.identical, 4, 1, 5, 1)这意味着:
"horse")在左序列的索引 0 插入。"dog"、"cat" 和 "cow")和右序列从索引 1 开始的 3 个元素(也是 "dog"、"cat" 和 "cow")是相同的。"sparrow")被右序列从索引 4 开始的 1 个元素("koala")替换。"swift")和右序列从索引 5 开始的 1 个元素("swift")是相同的。Diffitic 通过 Swift Package Manager 可用。
要安装它,请将依赖关系添加到您的 Package.swift 文件中,如下所示
import PackageDescription
let package = Package(
name: "Hello",
dependencies: [
.package(url: "https://github.com/hironytic/Diffitic.git", from: "2.0.0"),
],
...Ichimiya Hironori,[email protected]
Diffitic 可在 MIT 许可下使用。有关更多信息,请参阅 LICENSE 文件。