Lua 复合表/列表大小

我试图找到test[0]的条目数。

test = {}
test[0] = {}
test[0].x = {}
test[0].x[0] = 1
test[0].x[1] = 1
test[0].x[2] = 1
test[0].y = {}
test[0].y[0] = 1

我期望table.getn(test[0])的条目数为2,即test[0].xtest[0].y,但结果为0。为什么会这样,我需要做什么才能得到我要找的结果?

点赞
用户1009479
用户1009479

注意,在Lua 5.0中,table.getn已被Lua 5.1中的运算符替换。

表的大小仅对表的序列部分有效(即具有从1到某个数字n的正数数字键,并且n是大小)。

在此示例中,test [0]仅具有两个键“x”和“y”。因此,其大小为0

2015-08-18 04:29:41
用户258523
用户258523

table.getn和 lua 5.1 长度运算符 被定义为作用在“列表”或数组上。但是您的表不是一个数组。它没有数值索引。

因此,在 lua 5.1 中结果是未定义的(尽管这里将为零),在 lua 5.0 中结果为 0,因为大小被定义为 第一个 nil 值整数索引之前的那个整数索引,而这个整数索引是 1

还值得注意的是 table.getn(test[0].x) 将返回 2,而 table.getn(test[0].y) 将返回 0(因为 lua 数组从 1 开始)。

2015-08-18 04:29:48