當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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)。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。