【问题标题】:Trying to build a Table but keep getting an array with index values试图建立一个表,但不断得到一个带有索引值的数组
【发布时间】:2017-12-28 06:15:56
【问题描述】:

所以我正在尝试构建类似的东西(表 t0)

{
  l1 = {
    ['t1'] = function(params) print('t1) end,
    ['t2'] = function(params) print('t2') end
  },
  l2 = {
    ['t3'] = function(params) print('t3') end
  }
}

但是每次发现我都会尝试做类似的事情

t0.l1[#t0.l1+1] = { ['t1'] = function(params) print('t1) end }

它最终变成了一个有索引值的数组:

l1   table: 0x...
1    table: 0x... ({ ['t1'] = function(params) print('t1) end })
2    table: 0x... ({ ['t2'] = function(params) print('t1) end })

如何插入并创建一个表而不是一组表?

【问题讨论】:

  • 我不明白你的问题。您正在创建嵌套表,为什么还要期待其他内容?

标签: lua


【解决方案1】:

这里有几件事要解压,所以这里是:

  1. 您提到的表是关联数组的关联数组。
  2. "t0.l1[#t0.l1+1] =" 意思是“找出我们在数组 t0.l1 中的哪条记录号,然后加一。然后将 RHS 分配给那个索引。”李>

根据定义,第 2 行只会分配给编号索引,您通过示例说明这不是您想要的。要制作您在第一个示例中提到的关联数组的关联数组,您可以使用两种通用方法之一(假设您希望它最终成为“t0”):

t0 = {
  l1 = {
    t1 = function(params) print('t1') end,
    t2 = function(params) print('t2') end
  },
  l2 = {
    t3 = function(params) print('t3') end
  }
}

或者:

t0 = {}
t0["l1"] = {}
t0["l1"]["t1"] = function(params) print('t1') end
t0["l1"]["t2"] = function(params) print('t2') end
t0["l2"] = {}
t0["l2"]["t3"] = function(params) print('t3') end

(您也可以分配临时值,例如 'tmp = {} ... t0["l2"] = tmp')

其中任何一个都会得到你想要的(假设它是第一个示例中提到的关联数组的关联数组)。

【讨论】:

    【解决方案2】:

    当你这样做时

    t0.l1[#t0.l1+1] = { ['t1'] = function(params) print('t1') end }
    

    您正在将新表 {t1=function() end} 插入到 t0.l1 表的第一个索引中。发生这种情况是因为 #t0.l1 == 0 直到现在你在 t0.l1 中有两个由它们自己的键定义的元素(所以你使用 t0.l1 作为字典)并且运算符 # 仅适用于列表(而不是字典) .所以现在你有 3 个元素,一个在索引 1,另一个在索引 t1t2

    【讨论】:

      猜你喜欢
      • 2021-03-27
      • 2019-04-23
      • 1970-01-01
      • 2019-10-07
      • 2017-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-08
      相关资源
      最近更新 更多