1

Lua v. 5.2 では、すべて文字列である 2 つのテーブルのキーの補数を取得するにはどうすればよいですか?

最適には、次のような関数が必要です。

    table.complement ( t1, t2 )

... 戻り値は、テーブル 1 とテーブル 2 のキーと値のペアの補数であるテーブルです。つまり、返されたテーブルには、両方のテーブルにないキーのみが含まれます。

私が直面しているユースケースは、現在のノードを複数の兄弟ノードに分割する操作を実行する前に、一意の兄弟ノード ID (それぞれ 22 文字) の「前」のリストをフェッチする NoteCase Pro アウトライナーのスクリプトです。兄弟ノード ID の新しい「後」リスト、そのリストを 2 つのリストの補数に減らし、新しく作成されたノードを降格して、階層内の子ノードまたは元の現在のノードにします。

4

2 に答える 2

4
local function symm_diff(t1, t2)
  local t = {}
  for k, v in pairs(t1) do
    if t2[k] == nil then t[k] = v end
  end
  for k, v in pairs(t2) do
    if t1[k] == nil then t[k] = v end
  end
  return t
end
于 2013-03-18T17:52:19.630 に答える
0

これを自分で書けない理由はありません...こんな感じですか?

function table.complement(t1, t2)
    local res = {}

    for _,v1 in pairs(t1) do
        local found = false
        for _,v2 in pairs(t2) do
            if (v1 == v2) then
                found = true
                break
            end
        end
        if not found then table.insert(res, v1) end
    end

    for _,v2 in pairs(t2) do
        local found = false
        for _,v1 in pairs(t1) do
            if (v2 == v1) then
                found = true
                break
            end
        end
        if not found then table.insert(res, v2) end
    end

    return res
end

local t1 = {"stuff", "more", "things"}
local t2 = {"stuff", "junk", "things"}

table.foreach(table.complement(t1, t2), print)

印刷する

1    more
2    junk
于 2013-03-18T18:04:12.487 に答える