lua 求table长度和判断空
local table_a = {}
判断一:(错误方法)
if table_a == {} then
--你会发现你怎么也进不来 条件判断始终返回false,为什么会这样呢?
--原因:{}相当于创建了一个表,只不过这个表的名字是匿名的,你看不到,我们假设它叫table_b
--你会发现判断条件变成了比较table_a、table_b的内存地址。所以条件判断始终返回false。
--正确的实现方法:判断二
end
判断二:(正确方法)
if next(table_a) == nil then
--你想实现的操作
end
--成功原因:next获取表中的下一个内容,在空表里是没有下一个内容的,返回nil
//怎么求table的长度呢
获取数组的长度
对于一个数组我们通常可以使用#和table.getn来获取其长度
-
tabletest = {1,2,3,5,7}
-
print(table.getn(tabletest)) ------》5
-
print(#tabletest) ------》5
- 1
- 2
- 3
使用这两种方法都能得到这个数组的长度,但是如果
-
tabletest = {1,2,nil,3,5,7}
-
print(table.getn(tabletest)) ------》2
-
print(#tabletest) ------》2
- 1
- 2
- 3
发现不能获得我们数组真正的长度,这是因为数组默认遇到nil便被判断为数组结束,所以最好不要用#和table.getn来获取包含有nil的数组长度
获取table的长度
对于table来说,如果他不是数组,我们使用#和table.getn是不能获取它的长度的
-
tabletest = {a=1,b=2,c=3,e=5,f=7}
-
print(table.getn(tabletest)) ------》0
-
print(#tabletest) ------》0
- 1
- 2
- 3
我们可以使用pairs来获取
-
tabletest = {a=1,b=2,c=3,d=5,e=7}
-
local count=0
-
for k,v in pairs(tabletest) do
-
count = count + 1
-
end
-
print(count) ------》5
注意#只能获取索引为连续数字的长度,如果不连续,只能获取到连续的地方,其他地方被舍弃。