在Lua中模拟使用List和Dictionary

1.List

List = {}
List.__index = List

function List:New(t)--创建List对象
    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)--遍历,参数function
    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)--元素的在List中的索引
    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

return List

2.Dictionary

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

return Dictionary

3.用法很简单和C#相似:

local list=List:New()
list:Add(1)
list:Remove(1)
........

你可能感兴趣的:(Lua)