11 个版本 (6 个稳定)
新版本 1.2.3 | 2024年8月6日 |
---|---|
1.2.2 | 2024年7月22日 |
1.2.1 | 2022年2月11日 |
0.3.0 | 2022年2月7日 |
0.1.0 | 2022年2月5日 |
#329 在 Rust 模式
每月下载 236 次
在 kifi 中使用
18KB
358 行
此包提供Change
枚举作为diff::Result
、lcs_diff::DiffResult
和wu_diff::DiffResult
的抽象;提供了diff_changes()
、diff_diff()
、lcs_changes()
、lcs_diff()
、wu_changes()
和wu_diff()
函数,用于通过LCS(最长公共子序列)或Wu差异算法计算或处理切片a和b之间的差异,并将其转换为Vec<Change>
,提供了patch()
函数,用于从a切片重新生成b和Vec<Change>
,以及提供了insert()
和remove()
函数,以支持编写自定义changes函数。
use slice_diff_patch::*;
let a = vec!["one", "TWO", "three", "four"];
let b = vec!["zero", "one", "two", "four"];
let diff = diff_diff(&a, &b);
assert_eq!(
diff,
vec![
Change::Insert((0, "zero")),
Change::Remove(2),
Change::Update((2, "two")),
],
);
assert_eq!(patch(&a, &diff), b);
let lcs = lcs_diff(&a, &b);
assert_eq!(
lcs,
vec![
Change::Insert((0, "zero")),
Change::Update((2, "two")),
Change::Remove(3),
],
);
assert_eq!(patch(&a, &lcs), b);
let wu = wu_diff(&a, &b);
assert_eq!(
wu,
vec![
Change::Insert((0, "zero")),
Change::Remove(2),
Change::Update((2, "two")),
],
);
assert_eq!(patch(&a, &wu), b);
另请参阅
- Hunt, James W; Szymanski, Thomas G. (1977). "A fast algorithm for computing longest common subsequences" http://www.cs.ust.hk/mjg_lib/bibs/DPSu/DPSu.Files/HuSz77.pdf
- Wu, Sun; Manber, Udi; Myers, Gene (1989). "An O(NP) Sequence Comparison Algorithm" https://publications.mpi-cbg.de/Wu_1990_6334.pdf
- Department of Mathematics and Computer Science. University of Southern Denmark (January 12, 2017). "The Hunt-Szymanski Algorithm for LCS" https://imada.sdu.dk/~rolf/Edu/DM823/E16/HuntSzymanski.pdf
- diff crate
- lcs-diff crate
- wu-diff crate
- Wikipedia: Hunt–Szymanski algorithm
- Wikipedia: Bitap algorithm
- 实际用例分析
依赖关系
~93KB