zoukankan      html  css  js  c++  java
  • (原创) cocos2d-x 3.0+ lua 学习和工作(4) : 公共函数(5): 计算table元素个数:table.nums

    这里的函数主要用来做:计算table元素个数。参考资料为quick_cocos.

    星月倾心贡献~~~

    我们先看一段代码

    local tbl = { [1] = 2, [2] = 2, [3] = 3 }
    print( "tbl length is " .. #tbl )

    这段代码是获得tbl的长度,即元素个数。

    输出:
    tbl length is 3

    拥有三个元素,没有问题。我们注意到元素的下标是,即key值是:1, 2, 3。即tbl[1], tbl[2], tbl[3]。如果,我们把下标修改,key修改后会怎么样呢?

    local tbl = { [1] = 2, [5] = 2, [3] = 3 }
    print( "tbl length is " .. #tbl )
    输出:
    tbl length is 1

    旁白不出来吼两句么~~~(小白:为什么是1,不是三个元素吗???)
    table的#tbl方法获得的元素长度是只对数组有效的,并且一定是从1开始的,顺序递增查找,所以上诉中#tbl,查找1成立,接着查找2,没有找到,结束查找,返回结果:1。

    再看两个例子:

    local tbl = { [4] = 2, [5] = 2, [3] = 3 }
    print( "tbl length is " .. #tbl )
    
    输出:
    tbl length is 0
    local tbl = { ["a"] = 2, ["b"] = 2, ["c"] = 3 }
    print( "tbl length is " .. #tbl )
    
    输出:
    tbl length is 0


     

    现在进入本章正题,获得table的元素个数方法,代码如下

    --[[
    -- 计算表格包含的字段数量
    -- lua table 的 “#” 操作只对依次排序的数值下标数组有效,table.nums() 则计算 table中所有不为 nil 的值的个数。
    -- @param t 要检查的表格(t表示是table)
    -- @return integer 返回表格的字段数量
    --]]
    function table.nums( t )
        local count = 0
        local t = checkTable( t )
        for k, v in pairs( t ) do
            count = count + 1
        end
        return count
    end

    checkTable是我之前写的文章中的一个函数,附上链接:http://www.cnblogs.com/wodehao0808/p/4015648.html

    通过这个table.nums方法就能够获得说有元素了。附上示例:

    local tbl = { [4] = 2, [5] = 2, [3] = 3 }
    print( "tbl length is " .. table.nums( tbl ) )
    
    输出:
    tbl length is 3

    本章到此结束,小白,你明白没有...(小白:我智商251的,好不...。)
    (星月:小白,原来你是250+1啊)

    (小白:...)

    再结束时再说明以下for循环的pairs和ipairs的区别:

    pairs会返回key,value。能遍历table所有元素,但是,pairs遍历是随机遍历的,无序的。(星月:被这个特性吭过...)

    ipairs则是遍历数组的,类似与#tbl获得元素个数方法。也是从1开始的,顺序递增查找。因为是递增查找,所以ipairs是有序查找

    唠叨到此结束~~~

    作者使用 cocos2d-x 3.0 + lua学习和工作心得,未经作者允许,请勿转载!在此谢谢各位手下留情~~~

    本文没有获得作者本人同意,不得转载,否则必追究相关责任。转载请注明出处!!~~

    原文地址:http://www.cnblogs.com/wodehao0808/p/4021921.html

  • 相关阅读:
    python使用zipfile递归压缩和解压缩文件
    文件上传控件bootstrap-fileinput中文设置没有效果的情况
    vue keep-alive 不生效和多级(三级以上)缓存失败
    Entityframework批量删除
    EasyUI ComboGrid 集成分页、按键示例
    在Entity Framework中使用事务
    MVC实用构架设计(三)——EF-Code First(6):数据更新最佳实践
    Entityframework更新数据和插入数据
    esayui-datagrid的使用
    javascript:;与javascript:void(0)使用介绍
  • 原文地址:https://www.cnblogs.com/wodehao0808/p/4021921.html
Copyright © 2011-2022 走看看