如何将表中的一个值与另一个表中的其他值列表进行比较

时间:2016-10-11 12:45:11

标签: lua lua-table

我有两张桌子:

a = {customer1:1234, customer2:3456, customer3:4567, customer4:3456}
b = {2345, 1234, 3456, 6789}

我想知道是否有办法比较匹配的表格。如果不是,那么该值将被删除。我无法找到一种与价值观进行比较的方法。

请告诉我如何实现这一目标?

2 个答案:

答案 0 :(得分:1)

您可以使用循环逐个元素地比较两个表。

请阅读Lua参考资料。

http://www.lua.org/manual/5.3/manual.html#3.3.4 http://www.lua.org/manual/5.3/manual.html#3.3.5

简单的例子

local a = {1, 2, 3}

for k, v in pairs(a) do

  print(v)
end

只需用其他东西替换印刷品。例如,迭代第二个表的另一个循环。使用两个嵌套循环可以将一个表的每个元素与另一个表的所有元素进行比较。你可以做任何你想做的事情!

请注意

a = {customer1:1234}

会导致脚本错误。将:替换为=

答案 1 :(得分:0)

假设您要从两个表中删除值,我将采用以下方法:

  1. 迭代a并将其值添加到集s_a
  2. 迭代b。如果值在s_a中,请将其添加到集s_b,如果不是从b中删除。
  3. (可选)s_a = nil; collectgarbage()释放一些记忆
  4. 迭代a并删除您在s_b
  5. 中找不到的值

    我的实施:

    local s_a, s_b, iter_b = {}, {}, ipairs(b)
    --starting with b because ipairs is a bit cheaper than pairs if done right
    for k,v in iter_b do
      s_b[v]=true;
    end
    for k,v in pairs(a) do
      if s_b[v] then
        s_a[v]=true
      else
        a[k]=nil
      end
    end
    s_b = nil; collectgarbage()
    for k,v in iter_b do
      if not s_a[v] then b[k] = nil
    end