转载: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,,- do
table.remove(self)
end
end function List:Contains(item)
local count = self:Count()
for i=,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=,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=,count do
action(self[i])
end
end function List:IndexOf(item)
local count = self:Count()
for i=,count do
if self[i] == item then
return i
end
end
return
end function List:LastIndexOf(item)
local count = self:Count()
for i=count,,- do
if self[i] == item then
return i
end
end
return
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 > ) 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,,- do
self[self.keyList[i]] = nil
table.remove(self.keyList)
end
end function Dictionary:ContainsKey(key)
local count = self:Count()
for i=,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=,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 =
local n = self:Count()
return function ()
i = i +
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=,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', '')
dic:Add('ShangHai', '') 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', '')
dic:Add('ShangHai', '') 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

lua实现List及Dictionary的更多相关文章

  1. Lua Table转C# Dictionary

    因为在游戏公司做web后台开发,经常会涉及到取游戏服务器的数据库里面读写各种操作. 昨天下午,服务器那边让我读一个配置显示到后台,让运营大佬们可以在web后台配置游戏参数. 本来以为很简单个事情,结果 ...

  2. 用好lua+unity,让性能飞起来——lua与c#交互篇

    前言 在看了uwa之前发布的<Unity项目常见Lua解决方案性能比较>,决定动手写一篇关于lua+unity方案的性能优化文. 整合lua是目前最强大的unity热更新方案,毕竟这是唯一 ...

  3. LUA 运算笔记

    循环 比如要实现这样的一个For for(int i=10;i>1;i—) { print(i) } lua的for循环 转换成LUA for i=10,1,-1 do print(i) end ...

  4. 深入xLua实现原理之C#如何调用Lua

    本文主要是探讨xLua下C#调用Lua的实现原理,有关Lua如何调用C#的介绍可以查看深入xLua实现原理之Lua如何调用C# C#与Lua数据通信机制 无论是Lua调用C#,还是C#调用Lua,都需 ...

  5. Nginx+lua+openresty精简系列

    1. CentOS系统安装openresty 你可以在你的 CentOS 系统中添加 openresty 仓库,这样就可以便于未来安装或更新我们的软件包(通过 yum update 命令).运行下面的 ...

  6. nginx HttpLuaModule

    http://wiki.nginx.org/HttpLuaModule#Directives Name ngx_lua - Embed the power of Lua into Nginx This ...

  7. 热更新解决方案--tolua学习笔记

    一.tolua使用准备工作:从GitHub上下载tolua(说明:这篇笔记使用的Unity版本是2019.4.18f1c1,使用的tolua是2021年4月9日从GitHub上Clone的tolua工 ...

  8. Lua脚本之语法基础快速入门

    要 1.基本数据类型 2.Lua中的常用语句结构以及函数 3.Lua中的常用语句结构介绍 4.Lua中的库函数 目录[-] 一.基本数据类型 二.Lua中的常用语句结构以及函数 1.Lua中的常用语句 ...

  9. redis(Remote Dictionary Server)

    redis的简介和使用   简介 redis(Remote Dictionary Server)是一种Nosql技术,它是一个开源的高级kv存储和数据结构存储系统,它经常被拿来和Memcached相比 ...

随机推荐

  1. F - ACboy needs your help again! (模拟)

    ACboy was kidnapped!! he miss his mother very much and is very scare now.You can't image how dark th ...

  2. javascript 数组排序

    var arr=[1,2,3,5,10,4,2,19,2,0]; alert(arr);//[1,2,3,5,10,4,2,19,2,0] arr.sort(function (a, b) {//升序 ...

  3. python字符串常用方法、分割字符串等

    一.字符串的常用方法 1.str.capitalize()  字符串首字母大写 2.str.center()  把字符串居中 3.str.isalnum() 判断字符串是否含有英文.数字,若有英文和数 ...

  4. [BZOJ2879][Noi2012]美食节(费用流)

    题目描述 CZ市为了欢迎全国各地的同学,特地举办了一场盛大的美食节.作为一个喜欢尝鲜的美食客,小M自然不愿意错过这场盛宴.他很快就尝遍了美食节所有的美食.然而,尝鲜的欲望是难以满足的.尽管所有的菜品都 ...

  5. Qt C++ libcaffe.so无法调用

    在用QT编写调用caffe的工程时,发现一直有个错误: error while loading shared libraries libcaffe.so.1.0.0-rc3: cannot open ...

  6. flask之werkzeug

    密码存储的主要形式: 明文存储:肉眼就可以识别,没有任何安全性. 加密存储:通过一定的变换形式,使得密码原文不易被识别. 密码加密的几类方式: 明文转码加密:BASE64, 7BIT等,这种方式只是个 ...

  7. flask中的蓝图 Blueprint

    模块化 随着flask程序越来越复杂,我们需要对程序进行模块化的处理,之前学习过python的模块化管理,于是针对一个简单的flask程序进行模块化处理 简单来说,Blueprint 是一个存储操作方 ...

  8. clustalX2使用以及相关的问题

    Clustalx的操作 第一步:输入序列文件. 第二步:设定比对的一些参数. 参数设定窗口. 第三步:开始序列比对. 第四步:比对完成,选择保存结果文件的格式 相关问题 CLUSTALX-是CLUST ...

  9. C++_友元1-友元类是什么

    友元函数:不是类的成员函数,但是能够访问类的私有数据成员. 之前有个矛盾就是规定非成员函数不能直接访问类的私有数据,但是这会儿却可以,但那只是针对常规非成员函数而言,特殊的非成员函数就可以访问类的私有 ...

  10. POJ_1703 Find them, Catch them 【并查集】

    一.题面 POJ1703 二.分析 需要将并查集与矢量法则相结合.par数组用以记录父节点,rank用以记录与父节点的关系.如题意,有两种关系,设定0是属于同一个帮派,1表示不属于同一个帮派. 运用并 ...