我是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.为什么?
谢谢大家。
答案 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
循环。可能有一个较短的方法,但这就是我要做的。