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)
........