(原創) cocos2d-x 3.0+ lua 學習和工做(4) : 公共函數(7): 其餘table方法

看了下其餘的table方法,好像沒有什麼好說的,註釋裏已經寫的很明白了,這裏就不羅嗦了~(小白:懶。。。)。參考資料爲quick_cocos.html

星月傾心貢獻~~~函數

--[[
-- 返回指定表格中的全部值(value)
-- example
    local t = { a = 1, b = 2, c = 3 }
    local values = table.values( t )
    -- values = { 1, 2, 3 }
    
-- @parame t 要檢查的表格(t表示是table)
-- @parame table 返回指定表格的全部值,它是一個值集合的表格
--]]
function table.values( t )
    local values = {}
    for _, v in pairs( t ) do
        values[#values + 1] = v
    end
    return values
end

--[[
-- 在 目標表格 的指定位置插入 來源表格,若是沒有指定位置則鏈接兩個表格
-- example
    local tDest = { 1, 2, 3 }
    local tSrc = { 4, 5, 6 }
    table.insertTo( tDest, tSrc )
    -- tDest = { 1, 2, 3, 4, 5, 6 }
    
    tDest = { 1, 2, 3 }
    table.insertTo( tDest, tSrc, 5 )
    -- tDest = { 1, 2, 3, nil, 4, 5, 6}
    
-- @param tDest 目標表格(t表示是table)
-- @param tSrc 來源表格(t表示是table)
-- @param iBegin 插入位置(i表示是integer)
--]]
function table.insertTo( tDest, tSrc, iBegin )
    begin = checkInt( iBegin )
    if begin <= 0 then
        begin = #tDest + 1
    end
    
    local len = #tSrc
    for i = 0, len - 1 do
        tDest[i + begin] = tSrc[i+1]
    end
end

--[[
-- 在表格中查找指定值,返回其索引,查找失敗則返回false
-- example
    local t = { "a", "b", "c" }
    table.indexOf( t, "b" )  -- 輸出 2
    
-- @param t 表格(t表示是table)
-- @param value 要查找的值
-- @param iBegin 起始索引值(i表示是integer)
-- @return integer 返回對應的索引  如:5
--]]
function table.indexOf( t, value, iBegin )
    for i = iBegin or 1, #t do
        if t[i] == value then
            return i
        end
    end
    return false
end

--[[
-- 在表格中查找指定值,返回其key,查找失敗則返回nil
-- example
    local t = { name = "a", name2 = "b", name3 = "c" }
    table.keyOf( t, "b" )  -- 輸出  name3

-- @param t 表格(t表示是table)
-- @param value 要查找的值
-- @return string 返回對應的 key 如:"name"
--]]
function table.keyOf( t, value )
    for k, v in pairs( t ) do
        if v == value then
            return k
        end
    end
    return nil
end

--[[
-- 從表格中刪除指定值,返回刪除的值的個數
-- example
    local t = { "a", "b", "c", "c" }
    table.removeByValue( t, "c", true )  -- 輸出 2
     
-- @param t 表格(t表示是table)
-- @param value 要刪除的值
-- @param bRemoveAll 是否刪除全部相同值(b表示是booleam)
-- @return integer 返回刪除的值的個數
--]]
function table.removeByValue( t, value, bRemoveAll )
    local c, i, max = 0, 1, #t
    while i <= max do
        if t[i] == value then
            table.remove( t, i )
            c = c + 1
            i = i - 1
            max = max - 1
            if not bRemoveAll then
                break
            end
        end
        i = i + 1
    end
    return c
end

--[[
-- 對錶格中每個值執行一次指定的函數,並用函數返回值更新表格內容
-- example
    local t = { name = "dualface", comp = "chukong" }
    table.map( t, function( v, k )
        -- 在每一個值先後添加括號
        return "(" .. v .. ")"
    end )
    
    -- 輸出修改後的表格內容
    for k, v in pairs( t ) do
        print( k, v )
    end
    
    -- 輸出
    -- name (dualface)
    -- comp (chukong)
    
    fn 參數指定的函數具備兩個參數,而且返回一個值。原型以下:
    function map_function(value, key)
        return value
    end
    
-- @param t (t表示是table)
-- @param fn 函數
--]]
function table.map( t, fn )
    for k, v in pairs( t ) do
        t[k] = fn( v, k )
    end
end

--[[
-- 對錶格中每個值執行一次指定的函數,但不更新表格內容
-- example
    local t = { name = "dualface", comp = "chukong" }
    table.walk( t, function( v, k )
        -- 輸出每個值
        print( v )
    end )
    
    fn 參數指定的函數具備兩個參數,而且返回一個值。原型以下:
    function map_function(value, key)
    end

-- @param t 表格(t表示是table)
-- @param fn 函數
--]]
function table.walk( t, fn )
    for k, v in pairs( t ) do
        fn( v, k )
    end
end

--[[
-- 對錶格中每個值執行一次指定的函數,若是該函數返回false,則對應的值會從表格中刪除
-- example
    local t = { name = "dualface", comp = "chukong" }
    table.filter( t, function( v, k )
        return v ~= "dualface"  -- 當值等於 dualface 時,過濾掉該值
    end )
    
    -- 輸出過濾後的表格內容
    -- comp chukong
    
    fn 參數指定的函數具備兩個參數,而且返回一個 boolean 值。原型以下:
    function map_function(value, key)
        return true or false
    end
    
-- @param t 表格(t表示是table)
-- @param fn 函數
--]]
function table.filter( t, fn )
    for k, v in pairs( t ) do
        if not fn( v, k ) then
            t[k] = nil 
        end
    end
end

--[[
-- 遍歷表格,確保其中的值惟一
-- example
    local t = { "a", "a", "b", "c" }
    local n = table.unique( t )
    -- n = { "a", "b", "c" }  == 重複的 a 被過濾掉
    
-- @param t 表格(t表示是table)
-- @return table 返回 包含全部惟一值的 表格
--]]
function table.unique( t )
    local check = {}
    local n = {}
    for k, v in pairs( t ) do
        if not check[v] then
            n[k] = v
            check[v] = true
        end
    end
    return n
end

做者使用 cocos2d-x 3.0 + lua學習和工做心得,未經做者容許,請勿轉載!在此謝謝各位手下留情~~~學習

本文沒有得到做者本人贊成,不得轉載,不然必追究相關責任。轉載請註明出處!!~~ui

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

相關文章
相關標籤/搜索