diff:小巧、易用的字串符和数组元素找不同库

1,272 阅读1分钟
原文链接: github.com

Simple diffing library in pure Swift.

Installing

You should use Swift Package Manager to install Diff. You will need snapshot 2016-04-12 or later to use Diff.

Usage

Start by importing the package:

Same

If there is no difference, the diff will be nil.

diff("Hello", "Hello") // nil

For the sake of brevity, we'll ! the rest of the examples since we know they're different.

Insert

let (range, string) = diff("Hello world", "Hello there world")!
// range: 6..
// string: "there "

Remove

let (range, string) = diff("Hello there world", "Hello world")!
// range: 6..
// string: ""

Other Types

Diff can diff any array. Here's an array of things that conform to Equatable:

let (range, replacement) = diff([1, 2, 3], [1, 2, 3, 4])!
// range: 3..
// replacement: [4]

You can even use arrays of anything as long as you can compare them:

let before: [Foo] = [a, b]
let after: [Foo] = [b]
let (range, replacement) = diff(before, after, compare: Foo.compare)!
// range: 0..
// replacement: []

Development

If you want to contribute to Diff, please write a test.

Building and running the tests locally with SPM is easy:

$ git clone https://github.com/soffes/diff
$ cd diff
$ swift build
$ swift test

Thanks

Thanks to Jonathan Clem for the original algorithm and Caleb Davenport for inspiration for the generics implementation and help debugging a few edge cases!