【问题标题】:How can I merge two tables like this? - Lua我怎样才能像这样合并两个表? - 卢阿
【发布时间】:2021-10-20 16:36:00
【问题描述】:

我把这些表设置成这样

local tableone = {["Gold"] = 10, ["Gem"] = 5}
local tabletwo = {["Level"] = 1}

这是合并的代码

local test = {tableone, tabletwo}
print(test)

但是如果我尝试合并表格,那么输出是这样的

[1] = {
   ["Gold"] = 10, 
   ["Gem"] = 5
},
[2] =  {
   ["Level"] = 1
}

我想要这样的输出

[1] = {
   ["Gold"] = 10, 
   ["Gem"] = 5,
   ["Level"] = 1
}

这可能吗? 对不起,如果我不擅长解释。

【问题讨论】:

  • 不太清楚如果有更多项目应该如何工作,您能否扩展您的示例以在每个表中有 2 个项目。并包含产生第一个结果的代码。
  • 好的。那我去编辑一下。
  • @Nifim 我编辑了它
  • 你用来获得第一个结果的代码是什么?
  • local tableone = {["Gold"] = 10, ["Gem"] = 5} local tabletwo = {["Level"] = 1} local test = {tableone, tabletwo} print(test)

标签: lua lua-table


【解决方案1】:

你可以用一个简单的嵌套循环来做到这一点。

local function merge(...)
  local result <const> = {}
  -- For each source table
  for _, t in ipairs{...} do
    -- For each pair in t
    for k, v in pairs(t) do
      result[k] = v
    end
  end
  return result
end

local t <const> = {merge(tableone, tabletwo)}

由于问题中的[1],我将结果放入表构造函数中。

【讨论】:

  • 但是我可以以某种方式重命名“[1]”吗?
  • 除非它在表构造函数中,否则[1] 无论如何都不是有效的 Lua。您始终可以将merge 结果直接分配给变量。
  • merge 函数也可以是表的元方法__add。然后可以使用:tab1+tab2 - metatable 中的另一个好地方是 __index.mergemerge 是该表的方法(就像数据类型字符串的 __index 中元方法的 string 表)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-29
  • 2021-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-12
相关资源
最近更新 更多