尝试构建一个表格,但是一直得到带有索引值的数组

所以我想要构建以下内容的东西(表格 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 })

如何插入并使一个表格成为一个数组而不是一个表格的数组?

点赞
用户2285255
用户2285255

当你执行

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

2017-12-27 22:09:40
用户6020403
用户6020403

有几件事情需要拆解,下面逐一说明:

  1. 你提到的表格是一个内含许多关联数组的关联数组。
  2. "t0.l1[#t0.l1+1] =" 的意思是 “找出我们正在使用的 t0.l1 数组中的记录编号,加一并将其赋值给 RHS 所在的索引”。

根据定义,第二行代码只会给一个有编号的索引赋值,这与你举例不符。要创建你提到的内含许多关联数组的关联数组,你可以使用以下两种方法(假设你想要最终的数组名称是“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')。

这两种方法都能得到你所需的结果(假设你需要的是包含多个关联数组的关联数组)。

2017-12-27 22:10:13