Lua复制和拆分表

时间:2017-11-29 22:47:13

标签: lua lua-table

我有一个包含大量递归子表的大表:

plist={"p1", "p3", "p10",...}

我需要获取此表的副本,其中只包含某些子表

table2={p1={def={...}},
        p3={...},
        p10={...},
        ...
}

结果,我应该得到一个表格:

function deepcopy(o, seen)
  seen = seen or {}
  if o == nil then return nil end
  if seen[o] then return seen[o] end
  local no
  if type(o) == 'table' then
    no = {}
    seen[o] = no
    for k, v in next, o, nil do
      no[deepcopy(k, seen)] = deepcopy(v, seen)
    end
    setmetatable(no, deepcopy(getmetatable(o), seen))
  else
    no = o
  end
  return o
end

local table2 = deepcopy(plist, table1)

table1应保持不变。

我尝试使用此代码:

local function copy(obj, seen)
  if type(obj) ~= 'table' then return obj end
  if seen and seen[obj] then return seen[obj] end
  local s = seen or {}
  local res = setmetatable({}, getmetatable(obj))
  s[obj] = res
  for k, v in pairs(obj) do res[copy(k, s)] = copy(v, s) end
  return res
end
local table2 = copy(plist, table1)

而且:

<div id="demo">
</div>

<div class="parameter">
  <div class="option" id="tab"></div>
  <div class="option" id="dual"></div>
  <div class="option" id="standard"></div>
</div>

两个都给我不对的table2。我应该使用什么代码?

1 个答案:

答案 0 :(得分:0)

我认为这里最好的策略是首先过滤然后执行深层复制,因为在执行深层复制时很难正确地仅过滤顶层。

a = {a=1, b=2}
b = filterAndCopy(a, {"b"})
for k, v in pairs(b) do
    print(k, v)
end

你可以这样测试:

b       2

产生输出:

{{1}}
相关问题