当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Elixir List.myers_difference用法及代码示例


Elixir语言中 List.myers_difference 相关用法介绍如下。

用法一

myers_difference(list1, list2)
(从 1.4.0 开始)
@spec myers_difference(list(), list()) :: [{:eq | :ins | :del, list()}]

返回表示 edit script 的关键字列表。

该算法在 E. Myers 的“An O(ND) Difference Algorithm and Its Variations”论文中进行了概述。

edit script 是关键字列表。每个键都说明了"editing action",以便使list1更接近等于list2; key 可以是 :eq:ins:del 。每个值都是 list1list2 的子列表,应该插入(如果对应的键 :ins )、删除(如果对应的键是 :del )或单独保留(如果对应的键是 :eq ) 在 list1 中,以便更接近 list2

如果要处理差异脚本中的嵌套,请参阅 myers_difference/3

例子

iex> List.myers_difference([1, 4, 2, 3], [1, 2, 3, 4])
[eq: [1], del: [4], eq: [2, 3], ins: [4]]

用法二

myers_difference(list1, list2, diff_script)
(从 1.8.0 开始)
@spec myers_difference(list(), list(), (term(), term() -> script | nil)) :: script
when script: [{:eq | :ins | :del | :diff, list()}]

返回一个关键字列表,该列表表示具有嵌套差异的 edit script

这是 myers_difference/2 的扩展,如果需要计算嵌套差异,可以给出diff_script 函数。如果没有这样的脚本,该函数可能会返回带有内部编辑脚本或nil 的列表。返回的内部编辑脚本将位于:diff 键下。

例子

iex> List.myers_difference(["a", "db", "c"], ["a", "bc"], &String.myers_difference/2)
[eq: ["a"], diff: [del: "d", eq: "b", ins: "c"], del: ["c"]]

相关用法


注:本文由纯净天空筛选整理自elixir-lang.org大神的英文原创作品 List.myers_difference(list1, list2)。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。