优雅计算Lua中table元素的个数

先来看看下列案列:

local a1 = { 1, 2, 3 }

local a2 = { [1]=1,  [3]=2,  [5]=3,  [7]=4 }

local a3 = { [2]=3, [10]=2, [20]=2 }

local a4 = { 2, name='yuanbl', 3, age=25, 5, 9 }

local a5 = { name='yuanbl', age=25, sex='男'}

local a6 = { 2, name='yuanbl', 3, age=25, 5, 9, hello=nil, 10 }

计算(# 或 table.getn())结果如下:

3

1

2

4

0

5

它是怎么做到的?

分析: table.getn(t) 和 #t 一样都是计算数组元素但不包括hash键值,并且数组元素一定是从1开始的,顺序递增且不包含元素nil。只有这种情况才能正确的计算个数,可知a1正确;再来分析a2,查找1成立,接着查找2,没有找到,结束查找,返回结果为1;a3不满足条件产生呵呵的结果;a4、a5、a6同理可分析。

正确计算table元素个数

function isTable ( value )

      if type( value ) ~= "table" then

             value = {}

       end

      return  value

end

function countNums ( t )

      local count = 0

      local t = isTable ( t )

      for k, v in pairs( t ) do

           count = count + 1

      end

      return  count

end

ngx.say( isTable( a1 ) )   -- 3

ngx.say( isTable( a2 ) )   -- 4

ngx.say( isTable( a3 ) )   -- 3

ngx.say( isTable( a4 ) )   -- 6

ngx.say( isTable( a5 ) )   -- 3

ngx.say( isTable( a6 ) )   -- 7

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容