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

注意#只能获取索引为连续数字的长度,如果不连续,只能获取到连续的地方,其他地方被舍弃。 

猜你喜欢

转载自blog.csdn.net/ylwdi/article/details/81868971