• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            Fork me on GitHub
            隨筆 - 215  文章 - 13  trackbacks - 0
            <2016年9月>
            28293031123
            45678910
            11121314151617
            18192021222324
            2526272829301
            2345678


            專注即時通訊及網(wǎng)游服務(wù)端編程
            ------------------------------------
            Openresty 官方模塊
            Openresty 標(biāo)準(zhǔn)模塊(Opm)
            Openresty 三方模塊
            ------------------------------------
            本博收藏大部分文章為轉(zhuǎn)載,并在文章開頭給出了原文出處,如有再轉(zhuǎn),敬請保留相關(guān)信息,這是大家對原創(chuàng)作者勞動成果的自覺尊重!!如為您帶來不便,請于本博下留言,謝謝配合。

            常用鏈接

            留言簿(1)

            隨筆分類

            隨筆檔案

            相冊

            Awesome

            Blog

            Book

            GitHub

            Link

            搜索

            •  

            積分與排名

            • 積分 - 219202
            • 排名 - 117

            最新評論

            閱讀排行榜

            lua實(shí)現(xiàn)List及Dictionary

            轉(zhuǎn)載:http://www.cnblogs.com/sanyejun/p/7801432.html

            http://www.maosongliang.com/archives/122

            參考 http://blog.csdn.net/jason_520/article/details/54173685

            實(shí)現(xiàn)List

            List = {}
            List.__index = List
             
            function List:New(t)
                local o = {itemType = t}
                setmetatable(o, self)
                return o
            end
             
            function List:Add(item)
                table.insert(self, item)
            end
             
            function List:Clear()
                local count = self:Count()
                for i=count,1,-1 do
                    table.remove(self)
                end
            end
             
            function List:Contains(item)
                local count = self:Count()
                for i=1,count do
                    if self[i] == item then
                        return true
                    end
                end
                return false
            end
             
            function List:Count()
                return table.getn(self)
            end
             
            function List:Find(predicate)
                if (predicate == nil or type(predicate) ~= 'function') then
                    print('predicate is invalid!')
                    return
                end
                local count = self:Count()
                for i=1,count do
                    if predicate(self[i]) then 
                        return self[i] 
                    end
                end
                return nil
            end
             
            function List:ForEach(action)
                if (action == nil or type(action) ~= 'function') then
                    print('action is invalid!')
                    return
                end
                local count = self:Count()
                for i=1,count do
                    action(self[i])
                end
            end
             
            function List:IndexOf(item)
                local count = self:Count()
                for i=1,count do
                    if self[i] == item then
                        return i
                    end
                end
                return 0
            end
             
            function List:LastIndexOf(item)
                local count = self:Count()
                for i=count,1,-1 do
                    if self[i] == item then
                        return i
                    end
                end
                return 0
            end
             
            function List:Insert(index, item)
                table.insert(self, index, item)
            end
             
            function List:ItemType()
                return self.itemType
            end
             
            function List:Remove(item)
                local idx = self:LastIndexOf(item)
                if (idx > 0) then
                    table.remove(self, idx)
                    self:Remove(item)
                end
            end
             
            function List:RemoveAt(index)
                table.remove(self, index)
            end
             
            function List:Sort(comparison)
                if (comparison ~= nil and type(comparison) ~= 'function') then
                    print('comparison is invalid')
                    return
                end
                if func == nil then
                    table.sort(self)
                else
                    table.sort(self, func)
                end
            end

             

            實(shí)現(xiàn)Dic

            Dictionary = {}
            Dictionary.__index = Dictionary
             
            function Dictionary:New(tk, tv)
                local o = {keyType = tk, valueType = tv}
                setmetatable(o, self)
                o.keyList = {}
                return o
            end
             
            function Dictionary:Add(key, value)
                if self[key] == nil then
                    self[key] = value
                    table.insert(self.keyList, key)
                else
                    self[key] = value
                end
            end
             
            function Dictionary:Clear()
                local count = self:Count()
                for i=count,1,-1 do
                    self[self.keyList[i]] = nil
                    table.remove(self.keyList)
                end
            end
             
            function Dictionary:ContainsKey(key)
                local count = self:Count()
                for i=1,count do
                    if self.keyList[i] == key then
                        return true
                    end
                end
                return false
            end
             
            function Dictionary:ContainsValue(value)
                local count = self:Count()
                for i=1,count do
                    if self[self.keyList[i]] == value then
                        return true
                    end
                end
                return false
            end
             
            function Dictionary:Count()
                return table.getn(self.keyList)
            end
             
            function Dictionary:Iter()
                local i = 0
                local n = self:Count()
                return function ()
                    i = i + 1
                    if i <= n then
                        return self.keyList[i]
                    end
                    return nil
                end
            end
             
            function Dictionary:Remove(key)
                if self:ContainsKey(key) then
                    local count = self:Count()
                    for i=1,count do
                        if self.keyList[i] == key then
                            table.remove(self.keyList, i)
                            break
                        end
                    end
                    self[key] = nil
                end
            end
             
            function Dictionary:KeyType()
                return self.keyType
            end
             
            function Dictionary:ValueType()
                return self.valueType
            end

            其中Dictionary:Iter是用來遍歷Dictionary的,用法如下:

            Lua

            local dic = Dictionary:New('string', 'string')
            dic:Add('BeiJing', '010')
            dic:Add('ShangHai', '021')

            while true do
                local it = dic:Iter()
                if it ~= nil then
                    local key = it()
                    local value = dic[key]
                    print('key: ' .. tostring(key) .. ' value: ' .. tostring(value))
                else
                    break
                end
            end

            local dic = Dictionary:New('string', 'string')
            dic:Add('BeiJing', '010')
            dic:Add('ShangHai', '021')
             
            while true do
                local it = dic:Iter()
                if it ~= nil then
                    local key = it()
                    local value = dic[key]
                    print('key: ' .. tostring(key) .. ' value: ' .. tostring(value))
                else
                    break
                end
            end
            posted on 2018-05-08 11:07 思月行云 閱讀(1112) 評論(0)  編輯 收藏 引用 所屬分類: Nginx\Openresty
            久久精品国内一区二区三区| 久久亚洲精品人成综合网| 韩国无遮挡三级久久| 色天使久久综合网天天| 亚洲va久久久噜噜噜久久男同| 久久亚洲高清观看| 国产偷久久久精品专区| 亚洲天堂久久精品| 日本久久久久亚洲中字幕| 久久99精品久久久久久野外 | 亚洲国产成人久久一区WWW| 97超级碰碰碰碰久久久久| 色8久久人人97超碰香蕉987| 99久久国产亚洲综合精品| 国产精品欧美亚洲韩国日本久久| 日韩久久久久久中文人妻 | 亚洲精品乱码久久久久久不卡| 国产精品热久久毛片| 国产69精品久久久久9999| 91性高湖久久久久| 超级碰久久免费公开视频| 99久久精品无码一区二区毛片| 99久久综合狠狠综合久久止| 亚洲精品乱码久久久久久蜜桃图片| 国产精品久久久香蕉| 亚洲欧美精品伊人久久| 国产精品久久久久久久久久影院 | 久久九九精品99国产精品| 91精品国产91久久久久久青草| 99久久夜色精品国产网站| 亚洲日本va午夜中文字幕久久| 亚洲精品无码久久久影院相关影片| 97久久超碰国产精品旧版 | 热久久视久久精品18| 免费精品99久久国产综合精品| 久久一区二区三区99| 88久久精品无码一区二区毛片| 欧美伊人久久大香线蕉综合| 91久久精品国产成人久久| 久久精品中文无码资源站| 中文字幕无码久久久|