在Lua中计算字符串索引的表数量。

我正在尝试计算一个带有一些字符串索引元素的表中的元素数量。当我尝试使用#运算符时,它只会忽略字符串索引的元素。例如:

local myTab = {1,2,3}
print(#myTab)

将返回3

local myTab = {}
myTab["hello"] = 100
print(#myTab)

将返回0 将它们混合在一起,我尝试过

local myTab = {1,2,3,nil,5,nil,7}
print(#myTab)
myTab["test"] = try
print(#myTab)

返回了7和3,这是正确的,因为我在某个地方读到#运算符在找到nil值时停止(但那么为什么第一个打印输出了7?)

最后,我尝试过

local myT = {123,456,789}
myT["test"] = 10
print(#myT)

打印出3,而不是4

为什么?

点赞
用户1009479
用户1009479

规则很简单,来自于【长度运算符】(http://www.lua.org/manual/5.3/manual.html#3.4.7):

除非给出了一个__len元方法,否则仅当table是一个序列时,即其正数数字键的集合等于某个非负整数n{1..n}时才定义table t的长度。在这种情况下,n为其长度。

在你的例子中:

local myTab = {1,2,3,nil,5,nil,7}

#mytab未定义,因为myTab不是一个序列,无论是否带有myTab["test"] = try

local myT = {123,456,789}

myT是序列,并且长度为3,无论是否带有myT["test"] = 10

2015-01-16 11:41:50