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相比 ...
随机推荐
- 使用Oracle(SQL Plus)
error: connection as sys should be as SYSDBA or SYSOPER 用户名 :sys 密码: 自己设定的database:ORCLconnect as : ...
- C语言/C++编程学习:C语言环境设置
C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构.C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现 ...
- Socket 简易静态服务器 WPF MVVM模式(三)
ViewModels类 这个类其实就是个大杂烩,什么都可以用 这个类没有什么东西,最多的就是写一下xaml页面的逻辑控制,开启关闭监听 using System; using System.Colle ...
- Kotlin 在kotlin内使用Java的一些注意(长篇)
首先呢,大部分的java在kotlin内是可以使用的. 但是有些java的关键字和kotlin的一样,而意义不一样就需要转义.(单引号括起来的)这一点需要注意. 这是一个长篇 我会不断更新.毕竟我也在 ...
- Atcoder Beginner Contest 121D(异或公式)
#include<bits/stdc++.h>using namespace std;int main(){ long long a,b; cin>>a>&g ...
- kali linux之拒绝服务
Dos不是DOS(利用程序漏洞或一对一资源耗尽的denial of service拒绝服务) DDoS分布式拒绝服务(多对一的攻击汇聚资源能力,重点在于量大,属于资源耗尽型) 历史 以前:欠缺技术能力 ...
- python基础之内建函数(二)
(7)max() 函数:返回列表.元祖或字符串中最大的元素,注意:字母“大于”数字.小写字母“大于”大写字母(字母排序是根据ASCII码表排的) 例如: >>>num = list ...
- select展开时 重新加载 option,ie 折叠问题 以及 chrome 没有变化问题
这个bug是因为浏览器的渲染问题引起的 一:重新加载option的渲染处理 1:火狐能重新渲染,并且select不折叠 2:ie重新渲染,但是select收缩折叠 3:chrome直接不重新进行渲染, ...
- Ubuntu16.04LTS安装集成开发工具IDE: CodeBlocks 和Eclipse-cdt
上文中,我们已经介绍了QT5.10.0在Ubuntu下的安装 https://www.cnblogs.com/si-lei/p/9240230.html, 接下来我们介绍CodeBlocks以及Ecl ...
- 跟我一起读postgresql源码(一)——psql命令
进公司以来做的都是postgresql相关的东西,每次都是测试.修改边边角角的东西,这样感觉只能留在表面,不能深入了解这个开源数据库的精髓,遂想着看看postgresql的源码,以加深对数据库的理解, ...