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来获取其长度

  1. tabletest = {1,2,3,5,7}

  2. print(table.getn(tabletest)) ------》5

  3. print(#tabletest) ------》5

  • 1
  • 2
  • 3

使用这两种方法都能得到这个数组的长度,但是如果

  1. tabletest = {1,2,nil,3,5,7}

  2. print(table.getn(tabletest)) ------》2

  3. print(#tabletest) ------》2

  • 1
  • 2
  • 3

发现不能获得我们数组真正的长度,这是因为数组默认遇到nil便被判断为数组结束,所以最好不要用#和table.getn来获取包含有nil的数组长度

获取table的长度

对于table来说,如果他不是数组,我们使用#和table.getn是不能获取它的长度的

  1. tabletest = {a=1,b=2,c=3,e=5,f=7}

  2. print(table.getn(tabletest)) ------》0

  3. print(#tabletest) ------》0

  • 1
  • 2
  • 3

我们可以使用pairs来获取

  1. tabletest = {a=1,b=2,c=3,d=5,e=7}

  2. local count=0

  3. for k,v in pairs(tabletest) do

  4. count = count + 1

  5. end

  6. print(count) ------》5

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