测试测试 | ✓ |
语言语言 | 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 文件。