Lua: 合并键并输出键不应该在表中有重复的值

我有一个表


test = {a= {1,2}, b= {1},c= {2,3}}

我想要的输出是

test_out = {ab={1,2}, bc = {1,2,3}, ac={1,2,3}}
点赞
用户204011
用户204011

显然,你想要的是集合操作。以下是一种无需任何库即可完成的方法:

local test = {a = {1, 2}, b = {1}, c = {2, 3}}

local keys = {}
for k, _ in pairs(test) do keys[#keys + 1] = k end
table.sort(keys)

local result = {}
local t1, t2, r, found

for i = 1, #keys - 1 do
  for j = i + 1, #keys do
    t1 = test[keys[i]]
    t2 = test[keys[j]]
    r, found = {}, {}
    for k = 1, #t1 do
      found[t1[k]] = true
      r[k] = t1[k]
    end
    for k = 1, #t2 do
      if not found[t2[k]] then
        r[#r + 1] = t2[k]
      end
    end
    result[keys[i] .. keys[j]] = r
  end
end

结果存储在 result 表中。如果你可以使用像 pl.Set 这样的集合库,你可以用更少的代码完成:

local test = {a = {1, 2}, b = {1}, c = {2, 3}}

local keys = {}
for k, _ in pairs(test) do keys[#keys + 1] = k end
table.sort(keys)

local result = {}
local Set = require "pl.Set"

for i = 1, #keys - 1 do
  for j = i + 1, #keys do
    result[keys[i] .. keys[j]] = Set.values(
      Set(test[keys[i]]) + Set(test[keys[j]])
    )
  end
end
2013-11-21 14:23:04