• <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
            <2018年10月>
            30123456
            78910111213
            14151617181920
            21222324252627
            28293031123
            45678910


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

            常用鏈接

            留言簿(1)

            隨筆分類

            隨筆檔案

            相冊

            Awesome

            Blog

            Book

            GitHub

            Link

            搜索

            •  

            積分與排名

            • 積分 - 216756
            • 排名 - 118

            最新評論

            閱讀排行榜

            lua實現List及Dictionary

            轉載:http://www.cnblogs.com/sanyejun/p/7801432.html

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

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

            實現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

             

            實現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 思月行云 閱讀(1098) 評論(0)  編輯 收藏 引用 所屬分類: Nginx\Openresty
            狠狠狠色丁香婷婷综合久久五月| 青青草原综合久久大伊人导航| 无码人妻少妇久久中文字幕蜜桃 | 久久久久久毛片免费看| 久久精品国产亚洲AV不卡| 亚洲精品视频久久久| 久久人人爽爽爽人久久久| 国内精品久久久久久久coent | 伊人久久大香线蕉综合影院首页| 国产精品免费看久久久| 亚洲国产精品狼友中文久久久| 久久不见久久见免费视频7| 久久这里有精品视频| 丁香狠狠色婷婷久久综合| 国产精品久久久久免费a∨| 色综合久久中文色婷婷| 亚洲日本va中文字幕久久| 久久亚洲2019中文字幕| 久久精品视频网| 国内精品九九久久精品| 免费精品久久久久久中文字幕 | 精品精品国产自在久久高清| 亚洲欧洲精品成人久久曰影片| 久久99毛片免费观看不卡| 亚洲精品乱码久久久久久久久久久久 | 国内精品伊人久久久久影院对白| 久久99精品久久只有精品 | 亚洲国产精品久久久久婷婷软件| 丁香色欲久久久久久综合网| 热综合一本伊人久久精品| 99久久免费国产精品| 亚洲成人精品久久| 久久国产亚洲精品麻豆| 久久香蕉国产线看观看乱码| 婷婷久久久亚洲欧洲日产国码AV| 色妞色综合久久夜夜| 久久久高清免费视频| 亚洲?V乱码久久精品蜜桃 | 7777久久亚洲中文字幕| 国产精品久久久久影视不卡| 国产91色综合久久免费|