如何在Lua中获得一张桌子的长度?

时间:2016-07-30 09:57:04

标签: lua

我是lua的新手,我的lua版本是5.1 我有这个问题。有人可以帮我解释'#'吗?

local tblTest =  
{  
    [1] = 2,  
    [2] = 5,  
    [5] = 10,  
}  
print(#tblTest)

此输出2和..

local tblTest =  
{  
    [1] = 2,  
    [2] = 5,  
    [4] = 10,  
}  
print(#tblTest)

输出是4.为什么?
谢谢大家。

1 个答案:

答案 0 :(得分:2)

输出为4,因为具有值的最后一个键是4,但这并不意味着还没有定义3。在lua 3中将定义为nil。因此,当您使用#运算符时,它会使用值计算序列中的每个键,直到最后一个非零值。除了,(我可能错了)表中的最后一个键是2的幂,它对语言优化有效,它计算到2的幂的值。通常你应该远离表nil值,因为有这样的事情会发生一些其他奇怪的行为。

这个块可以做你想做的事情:

local T = {
[1] = 2,
[2] = 5,
[10] = 10
}

local lengthNum = 0

For k, v in pairs(T) do -- for every key in the table with a corresponding non-nil value 
   lengthNum = lengthNum + 1
end
print(lengthNum)
}

这样做是检查整个表中的键(例如[1]或[2])并检查它们是否有值。具有非零值的每个键再次运行for循环。可能有一个较短的方法,但这就是我要做的。