2016-07-30 85 views
0

我是lua新手,我的lua版本是5.1。
我有这个问题。任何人都可以帮我解释'#'吗?如何获得Lua桌子的长度?

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

这个输出2 ..

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

输出是4,为什么?
感谢所有的你。

回答

2

输出是4,因为最后一个键的值是4,但这并不意味着3也没有定义。在lua 3中将被定义为零。因此,当您使用#运算符时,它将使用一个值对序列中的每个键进行计数,直到最后一个非零值。除了(而且我可能错了)表中的最后一个键是2的幂,它对语言优化起作用,它计数到2的幂。一般来说,你应该远离表与零值,因为有一些其他奇怪的行为,因此发生。

这一块与你想要什么,虽然:

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循环。这可能有一个更简单的方法,但这是我如何做到这一点。

+0

是的,你是致命的错误。看到这个笨蛋。 – Deduplicator

+0

我是说我的数值达到了2的幂数,因为它应该说是价值的关键,还是我错在其他地方? – Jacques

+0

尽管可能不会出现漏洞,但它*可以*计数到2的幂次。没有保证,细节在愚弄。 – Deduplicator