Lua判断数组大小

通过Lua数据类型我们可以得知,在Lua中没有数组这一类型,取而代之的是table。我们还知道在Lua中取元素的个数是使用#,这就带来一个问题,如果给定一个table能否使用#符号来判断出元素的个书呢,如果这个table是一个map呢?

local tblTest1 = { 1, a = 2, 3 }
print("Test1 " .. #(tblTest1))

local tblTest2 = { 1, nil }
print("Test2 " .. #(tblTest2))

local tblTest3 = { 1, nil, 2 }
print("Test3 " .. #(tblTest3))

local tblTest4 = { 1, nil, 2, nil }
print("Test4 " .. #(tblTest4))

我们可以看到,当读到第一个元素时就停止了长度统计,打印的长度都是第一个nil元素之前的个数。而且如果其中包含了键值对,那么就直接忽略。还有一个有意思的点是:使用lualuajit两个命令执行,得到的结果是不同的。

~/Desktop/work/lua$ lua t.lua 
Test1 2
Test2 1
Test3 3
Test4 1
~/Desktop/work/lua$ luajit t.lua 
Test1 2
Test2 1
Test3 1
Test4 1