lua实现List及Dictionary
转载: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的更多相关文章
- Lua Table转C# Dictionary
因为在游戏公司做web后台开发,经常会涉及到取游戏服务器的数据库里面读写各种操作. 昨天下午,服务器那边让我读一个配置显示到后台,让运营大佬们可以在web后台配置游戏参数. 本来以为很简单个事情,结果 ...
- 用好lua+unity,让性能飞起来——lua与c#交互篇
前言 在看了uwa之前发布的<Unity项目常见Lua解决方案性能比较>,决定动手写一篇关于lua+unity方案的性能优化文. 整合lua是目前最强大的unity热更新方案,毕竟这是唯一 ...
- LUA 运算笔记
循环 比如要实现这样的一个For for(int i=10;i>1;i—) { print(i) } lua的for循环 转换成LUA for i=10,1,-1 do print(i) end ...
- 深入xLua实现原理之C#如何调用Lua
本文主要是探讨xLua下C#调用Lua的实现原理,有关Lua如何调用C#的介绍可以查看深入xLua实现原理之Lua如何调用C# C#与Lua数据通信机制 无论是Lua调用C#,还是C#调用Lua,都需 ...
- Nginx+lua+openresty精简系列
1. CentOS系统安装openresty 你可以在你的 CentOS 系统中添加 openresty 仓库,这样就可以便于未来安装或更新我们的软件包(通过 yum update 命令).运行下面的 ...
- nginx HttpLuaModule
http://wiki.nginx.org/HttpLuaModule#Directives Name ngx_lua - Embed the power of Lua into Nginx This ...
- 热更新解决方案--tolua学习笔记
一.tolua使用准备工作:从GitHub上下载tolua(说明:这篇笔记使用的Unity版本是2019.4.18f1c1,使用的tolua是2021年4月9日从GitHub上Clone的tolua工 ...
- Lua脚本之语法基础快速入门
要 1.基本数据类型 2.Lua中的常用语句结构以及函数 3.Lua中的常用语句结构介绍 4.Lua中的库函数 目录[-] 一.基本数据类型 二.Lua中的常用语句结构以及函数 1.Lua中的常用语句 ...
- redis(Remote Dictionary Server)
redis的简介和使用 简介 redis(Remote Dictionary Server)是一种Nosql技术,它是一个开源的高级kv存储和数据结构存储系统,它经常被拿来和Memcached相比 ...
随机推荐
- SQL cast 函数
(1).CAST()函数的参数是一个表达式,它包括用AS关键字分隔的源值和目标数据类型.以下例子用于将文本字符串'12'转换为整型: SELECT CAST('12' AS int) (2).返回值是 ...
- C#三层架构搭建
一.简介 主要分为:界面层(User Interface layer),业务逻辑层(Business Logic Layer),数据访问层(Data access layer) 1.作用 界面层(UI ...
- 《javascript 高级程序设计》 笔记2 8~章
chapter 8 BOM(浏览器对象模型) window对象 表示浏览器的一个实例. 直接在window对象上定义的属性可以通过delete操作符删除,而全局变量不可以. 窗口关系及框架 位置操作 ...
- PLSQL导出语句的查询结果
不需要把全部结果都展示出来
- php中的静态方法实例理解
<?php header("content-type:text/html;charset=utf-8"); class Human{ static public $name ...
- python wraps装饰器
这是一个很有用的装饰器.看过前一篇反射的朋友应该知道,函数是有几个特殊属性比如函数名,在被装饰后,上例中的函数名foo会变成包装函数的名字 wrapper,如果你希望使用反射,可能会导致意外的结果.这 ...
- 5. pytest的断言
一.pytest 支持Python自带的标准断言 def f(): return 3 def test_function(): assert f() == 4 pytest 的断言报告,也很丰富,和详 ...
- VUE学习(一)
1.搭建vue环境 2.了解 v-on 事件监听,常常跟事件(click,mousemove,change等鼠标或者手势事件)在一起,eg:v-on:click,语法糖——:(冒号) 需要在meth ...
- Fast Matrix Operations UVA - 11992 线段树
题意翻译 有一个r行c列的全0矩阵,有以下三种操作. 1 X1 Y1 X2 Y2 v 子矩阵(X1,Y1,X2,Y2)的元素加v 2 X1 Y1 X2 Y2 v 子矩阵(X1,Y1,X2,Y2)的元素 ...
- 5、C++结构体的使用
5.结构体定义 结构体是用户带定义的类型,而结构声明定义了这种类型的数据属性.定义了类型后,便可以创建这种类型的变量,因此创建结构包括两步.首先,定义结构描述——它描述并标记了能够存储在结构中的各种数 ...