Diffitic 2.0.1

Diffitic 2.0.1

测试测试
语言语言 SwiftSwift
许可 MIT
发布最新版本2017年10月
SwiftSwift 版本4.0
SPM支持构建日期包

Hironori Ichimiya 维护。



Diffitic 2.0.1

  • 作者:
  • 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 函数的返回值是一个由段组成的数组。

一个段由五个值组成的元组表示:typeleftIndexleftCountrightIndexrightCount
leftIndexleftCount 指向左序列的一部分。
同样适用于右序列的 rightIndexrightCount
type 表示段的类型。

类型 描述
.identical 序列的两部分相同。
.inserted 右部分被插入。
.deleted 左部分被删除。
.replaced 左部分被右部分替换。

在本例中,result 由以下四个段组成

  • 0: (.inserted, 0, 0, 0, 1)
  • 1: (.identical, 0, 3, 1, 3)
  • 2: (.replaced, 3, 1, 4, 1)
  • 3: (.identical, 4, 1, 5, 1)

这意味着:

  • 0: 右序列从索引 0 开始的 1 个元素(即 "horse")在左序列的索引 0 插入。
  • 1: 左序列从索引 0 开始的 3 个元素("dog""cat""cow")和右序列从索引 1 开始的 3 个元素(也是 "dog""cat""cow")是相同的。
  • 2: 左序列从索引 3 开始的 1 个元素("sparrow")被右序列从索引 4 开始的 1 个元素("koala")替换。
  • 3: 左序列从索引 4 开始的 1 个元素("swift")和右序列从索引 5 开始的 1 个元素("swift")是相同的。

需求

  • Swift 4.0+
  • iOS 8.0+
  • macOS 10.9+
  • watchOS 2.0+
  • tvOS 9.0+

安装

Swift Package Manager

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 文件。