• <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

            搜索

            •  

            積分與排名

            • 積分 - 216849
            • 排名 - 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 思月行云 閱讀(1099) 評論(0)  編輯 收藏 引用 所屬分類: Nginx\Openresty
            人妻精品久久无码区| 国产精品成人99久久久久91gav| 久久精品一区二区影院| 久久黄色视频| 模特私拍国产精品久久| 国产精品久久午夜夜伦鲁鲁| 国产精品天天影视久久综合网| 国产精品热久久毛片| 国内精品人妻无码久久久影院导航| 久久综合中文字幕| 久久狠狠爱亚洲综合影院| 亚洲AV日韩AV永久无码久久| 久久精品国产99国产精偷| 国产精品美女久久福利网站| 成人久久综合网| 国产A三级久久精品| 国产午夜精品久久久久九九| 精品久久久久久中文字幕大豆网| 青青青伊人色综合久久| 久久综合九色综合网站| 97视频久久久| 日日狠狠久久偷偷色综合96蜜桃 | 久久久久99精品成人片直播| 国产精品无码久久四虎| 狠狠狠色丁香婷婷综合久久五月| 国产69精品久久久久观看软件| 久久久久国产精品| 精品久久久久久亚洲精品| 久久久久久免费视频| 久久综合色区| 国产综合精品久久亚洲| 久久亚洲国产欧洲精品一| 久久精品aⅴ无码中文字字幕重口| 久久无码AV一区二区三区| 久久亚洲av无码精品浪潮| 国产精品亚洲综合专区片高清久久久| 久久超碰97人人做人人爱| 国产午夜免费高清久久影院| 韩国免费A级毛片久久| 99久久人妻无码精品系列| 久久青草国产精品一区|