尝试构建一个表,但不断获取具有索引值的数组

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了尝试构建一个表,但不断获取具有索引值的数组相关的知识,希望对你有一定的参考价值。

所以我正在尝试构建类似的东西(表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 })

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

答案

这里有几件要解压的东西,所以这里有:

  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')

这些中的任何一个都可以得到你想要的东西(假设它是第一个例子中提到的关联数组的关联数组)。

另一答案

当你这样做

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

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

以上是关于尝试构建一个表,但不断获取具有索引值的数组的主要内容,如果未能解决你的问题,请参考以下文章

具有获取 json 值的片段中的自定义适配器

在 C# 的代码隐藏中创建具有值的表脚本

使用numpy选择排除某些索引的数组中最小值的索引

JQ:查找具有特定属性值的对象的数组索引

在 1D NumPy 数组中查找值的索引/位置(具有相同的值)[重复]

将 2D numpy 数组重塑为 3 个具有 x,y 索引的 1D 数组