#diff #slice #patch #lcs #longest #change #function

slice-diff-patch

提供切片 diff 和 patch 工具函数的库

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日

#329Rust 模式

Download history 17/week @ 2024-04-20 11/week @ 2024-04-27 5/week @ 2024-05-04 2/week @ 2024-05-25 2/week @ 2024-06-01 1/week @ 2024-06-08 2/week @ 2024-06-22 1/week @ 2024-06-29 25/week @ 2024-07-06 2/week @ 2024-07-13 108/week @ 2024-07-20 10/week @ 2024-07-27 116/week @ 2024-08-03

每月下载 236
kifi 中使用

MIT 许可证

18KB
358

此包提供Change枚举作为diff::Resultlcs_diff::DiffResultwu_diff::DiffResult的抽象;提供了diff_changes()diff_diff()lcs_changes()lcs_diff()wu_changes()wu_diff()函数,用于通过LCS(最长公共子序列)或Wu差异算法计算或处理切片ab之间的差异,并将其转换为Vec<Change>,提供了patch()函数,用于从a切片重新生成bVec<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);

另请参阅

依赖关系

~93KB