這里的函數主要用來做:返回指定表格中所有的鍵。參考資料為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學習和工作心得,未經作者允許,請勿轉載!在此謝謝各位手下留情~~~
本文沒有獲得作者本人同意,不得轉載,否則必追究相關責任。轉載請注明出處!!~~