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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM