(原创) 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

时间: 2024-08-05 06:37:58

(原创) cocos2d-x 3.0+ lua 学习和工作(4) : 公共函数(5): 返回指定表格中的所有键(key):table.keys的相关文章

(原创)cocos2d-x 3.0+ lua 学习和工作(2) : 单一继承简单介绍

-- 星月相随倾心贡献~~~ -- 本章简单介绍一下:单一继承 -- 多继承本人还没有用过,主要是lua多继承感觉不好用~~~个人感觉~~~大汗~! -- example: local Base = class( "Base" ) Base.__index = Base function Base:ctor(...) print( self.__cname ) -- 输出:类名字.class( "xxx" ), self._cname 就是 xxx end func

(原创) cocos2d-x 3.0+ lua 学习和工作(4) : 公共函数(7): 其他table方法

看了下其他的table方法,好像没有什么好说的,注释里已经写的很明白了,这里就不罗嗦了~(小白:懒...).参考资料为quick_cocos. 星月倾心贡献~~~ --[[ -- 返回指定表格中的所有值(value) -- example local t = { a = 1, b = 2, c = 3 } local values = table.values( t ) -- values = { 1, 2, 3 } -- @parame t 要检查的表格(t表示是table) -- @para

(原创) cocos2d-x 3.0+ lua 学习和工作(4) : 公共函数(8): 生成只读table

这个函数的作用是:生成只读table. --[[ -- 生成只读table -- @param table t 需要不允许修改的table example: local tb = {"星期一", "星期二", "星期日"} local days = readOnly( tb ); days[2] = "星期三哪去了啊?" ; "[string \"Functions.lua\"]:466: 别修改

(原创) cocos2d-x 3.0+ lua 学习和工作(4) : 公共函数(6): 合并表格:table.merge

这里的函数主要用来做:合并表格.参考资料为quick_cocos. 星月倾心贡献~~~ --[[ -- 将 来源表格 中所有键及值复制到 目标表格 对象中,如果存在同名键,则覆盖其值 -- example local tDest = { a = 1, b = 2 } local tSrc = { c = 3, d = 4 } table.merge( tDest, tSrc ) -- tDest = { a = 1, b = 2, c = 3, d = 4 } -- @param tDest 目

(原创) cocos2d-x 3.0+ lua 学习和工作(5) : table的remove的坑

本章主要讲下,table的remove,这个东西不注意就容易被坑(被坑的飘过~~~),当然,这里是针对数组table.即用ipairs方法遍历. 星月倾心贡献~~~ 看示例1:直接nil local tbl = { 1, 2, 3, 4, 5 } for k, v in ipairs( tbl ) do if v == 3 then tbl[k] = nil else print( "one: " .. k .. ":" .. v ) end end -- 再次输出

(原创) cocos2d-x 3.0+ lua 学习和工作(4) : 公共函数(4): handler

这里的函数主要用来做:回调函数.参考资料为quick_cocos. 星月倾心贡献~~~ --[[ -- 将lua对象及方法包装为一个匿名函数 -- 许多功能需要传入一个 Lua 函数做参数,然后在特定事件发生时就会调用传入的函数.例如触摸事件.帧事件等等. -- example: local MyScene = class( "MyScene", function() ) return cc.Layer:create() end ) function MyScene:ctor() se

(原创) 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].如果,我们

(原创) cocos2d-x 3.0+ lua 学习和工作(4) : 公共函数(3): 深度克隆clone()

先上一段代码: local tbl = { ["a"] = 1, ["b"] = 2 } local cpy = tbl for k, v in pairs( tbl ) do print( "tab: " .. k .. ":".. v ) -- 打印tbl里的元素值 end for k, v in pairs( cpy ) do print( "cpy: " .. k .. ":".

(原创) cocos2d-x 3.0+ lua 学习和工作(4) : 公共函数(2): 检查

这里的函数主要用来做:检查操作.参考资料为quick_cocos. 星月倾心贡献~~~ --[[ -- 检查并转换为数值,转换失败则返回 0 -- @param value 要检查并转换的值 -- @param base 进制,默认为十进制 -- @return number 返回的数值 --]] function checkNumber( value, base ) return tonumber( value, base ) or 0 end --[[ -- 检查并转换为布尔值, 除了nil