• <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年5月>
            293012345
            6789101112
            13141516171819
            20212223242526
            272829303112
            3456789


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

            常用鏈接

            留言簿(1)

            隨筆分類

            隨筆檔案

            相冊

            Awesome

            Blog

            Book

            GitHub

            Link

            搜索

            •  

            積分與排名

            • 積分 - 215473
            • 排名 - 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 思月行云 閱讀(1089) 評論(0)  編輯 收藏 引用 所屬分類: Nginx\Openresty
            99久久久久| 人妻少妇久久中文字幕| 久久不射电影网| 久久99亚洲综合精品首页| 欧美久久一级内射wwwwww.| 亚洲日本久久久午夜精品| 精品永久久福利一区二区| 国产精品亚洲综合专区片高清久久久| 久久国产影院| 久久久久成人精品无码中文字幕 | 久久SE精品一区二区| 久久久久久午夜成人影院| 精品无码久久久久久国产| 无码AV波多野结衣久久| 国产香蕉97碰碰久久人人| 99久久超碰中文字幕伊人| 无码精品久久一区二区三区| 国产精品久久久久久福利69堂| 性做久久久久久久久老女人| 天天综合久久久网| 久久精品亚洲一区二区三区浴池| 欧美亚洲日本久久精品| 亚洲国产精品热久久| 国产午夜免费高清久久影院 | 精品国产乱码久久久久久呢| 韩国三级中文字幕hd久久精品| 国产精品国色综合久久| 中文字幕热久久久久久久| 中文字幕久久精品| 色综合久久天天综线观看| 大美女久久久久久j久久| 一级做a爱片久久毛片| 国产精品一久久香蕉国产线看| 欧美噜噜久久久XXX| 天天躁日日躁狠狠久久| 亚洲色婷婷综合久久| 人妻无码久久一区二区三区免费| 亚洲AV无码一区东京热久久| 日韩精品久久久久久久电影蜜臀| 久久婷婷人人澡人人爽人人爱| 亚洲中文字幕久久精品无码APP|