zoukankan      html  css  js  c++  java
  • (原创) cocos2d-x 3.0+ lua 学习和工作(4) : 公共函数(5): 返回指定表格中的所有键(key):table.keys

    这里的函数主要用来做:返回指定表格中所有的键。参考资料为quick_cocos.

    星月倾心贡献~~~

    --[[
    -- 返回指定表格中的所有键(key)
    -- example:
        local t = ( a = 1, b = 2, c = 3 )
        local keys = table.keys( t )
        -- keys = { "a", "b", "c" }
        
    -- @param t 要检查的表格(t表示是table)
    -- @param table 返回指定表格的所有键(key),它是一个键集合的表格
    --]]
    function table.keys( t )
        local keys = {}
        for k, _ in pairs( t ) do
            keys[#keys + 1] = k
        end
        return keys
    end

    原理很简单:获取指定表格的所有key,将key保存到一张表中,然后返回,so easy~~~(小白:不要说鸟语...)
    获取所有的键这个功能貌似没有什么用...不过,特殊情况下就能使用了。

    额...在这之前,我们先看个简单排序例子...谁乱扔蔬菜...我...(小白:你有今天...)

    local tbl = { 1, 3, 5, 6, 5, 8, 0 }  -- 一个数组
    -- 星月要对这个数组排序
    table.sort( tbl )  -- 系统自带排序方法
    
    for k, v in ipairs( tbl ) do 
        print( k .. ":" .. v )
    end

    上面有个数组table,星月用table自带的sort函数进行排序,然后输出结果。大家注意:这里用ipairs遍历。因为ipairs是顺序遍历的~~~

    输出:
    1:0
    2:1
    3:3
    4:5
    5:5
    6:6
    7:8

    输出没有任何错误。

    ( 小白:可是我想从高到低输出。。。)星月:这个可以有。。。

    local tbl = { 1, 3, 5, 6, 5, 8, 0 }  -- 一个数组
    
    -- 排序规则
    local function isBag( t1, t2 )
        return t1 > t2
    end
    
    -- 星月要对这个数组排序
    table.sort( tbl, function( t1, t2 )
        return isBag( t1, t2 )
    end )
    
    for k, v in ipairs( tbl ) do 
        print( k .. ":" .. v )
    end
    
    输出:
    1:8
    2:6
    3:5
    4:5
    5:3
    6:1
    7:0

    哦也~~从大到小输出。(小白:好厉害的样子。。。)
    分析下,首先我们增加了一个函数isBag,这个方法返回两个数值的比较结果。然后在sort中增加了匿名函数function( t1, t2 ),这个函数返回isBag的结果。当对tbl排序时,会调用匿名函数,传入的参数就是tbl的value数值,然后根据匿名函数返回的结果进行排序。然后,没了。(小白:好晕。)

    table.sort()方法只能对数组排序。这个要注意。

    上面是对数组的value进行排序,如果要对key值进行排序呢,这时就可以用到本章将的函数了。

    function table.keys( t )
        local keys = {}
        for k, _ in pairs( t ) do
            keys[#keys + 1] = k
        end
        return keys
    end
    
    local tbl = { [101] = "a", [121] = "b", [186] = "c", [100] = "d", [145] = "e", [122] = "f", [11] = 0 }  -- 非数组tbl
    
    local keys = table.keys( tbl )  -- 获得指定表格所有keys
    
    -- 排序规则
    local function isBag( t1, t2 )
        return t1 > t2
    end
    
    -- 注意:星月对keys表格进行排序
    table.sort( keys, function( t1, t2 )
        return isBag( t1, t2 )
    end )
    
    for k, v in ipairs( keys ) do 
        print( "keys: " .. v .. ":" .. tbl[v] )   -- 根据keys,输出tbl。对key排序。
    end
    
    输出:
    keys: 186:c
    keys: 145:e
    keys: 122:f
    keys: 121:b
    keys: 101:a
    keys: 100:d
    keys: 11:0

    好了,本章到这里结束。

    本章要点:table.sort方法,table.keys方法。

    (星月:小白...小白...)

    (小白:不要打扰我看天线宝宝~~~)

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

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

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

  • 相关阅读:
    ASP.NET MVC Core的ViewComponent
    docker学习笔记
    C#调用RabbitMQ实现消息队列(转)
    在Gerrit中修改project.config
    Linux设备模型:6、Bus
    Linux设备模型:5、device和device driver
    Linux设备模型:4、sysfs
    Linux设备模型:3、Uevent
    Linux设备模型:2、基本对象 Kobject、Kset、Ktype
    Linux设备模型:1、设计思想
  • 原文地址:https://www.cnblogs.com/wodehao0808/p/4022877.html
Copyright © 2011-2022 走看看