转载: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. HTML5移动Web开发实战 PDF扫描版​

    <HTML5移动Web开发实战>提供了应对这一挑战的解决方案.通过阅读本书,你将了解如何有效地利用最新的HTML5的那些针对移动网站的功能,横跨多个移动平台.全书共分10章,从移动Web. ...

  2. if 判断

    语法一: if 条件: #条件成立时执行的字代码块 代码1 代码2 代码3 示例: sex='female' age=18 is_beautiful=True if sex == 'female' a ...

  3. arcconf工具相关命令V1.0

    arcconf工具相关命令V1.0 清除当前所有raid配置 Arcconf  delete  1  array  all       #删除所有逻辑盘 Arcconf  uninit  1  all ...

  4. go语言 defer 你不知道的秘密!

    go 语言的defer功能强大,对于资源管理非常方便,但是如果没用好,也会有陷阱哦.我们先来看几个例子. 例一: defer 是先进后出 这个很自然,后面的语句会依赖前面的资源,因此如果先前面的资源先 ...

  5. sqlServer组合主键

    sqlServer   组合主键 创建表时: create table Person ( Name1 ) not null ,Name2 ) not null primary key(Name1,Na ...

  6. 八大排序算法的python实现(四)快速排序

    代码: #coding:utf-8 #author:徐卜灵 #交换排序.快速排序 # 虽然快速排序称为分治法,但分治法这三个字显然无法很好的概括快速排序的全部步骤.因此我的对快速排序作了进一步的说明: ...

  7. NetworkX初相识

    听说NetworkX是一个很牛的复杂网络研究的工具,就来试一下吧. import networkx as nx G= nx.Graph()#建立一个空白的图 G.add_node("node ...

  8. dsp之BF531笔记

    获得更多资料欢迎进入我的网站或者 csdn或者博客园 很久以前的BF531的笔记,觉得有用分享出来.摘自于open dsp 通用Gpio ADSP-BF53x 处理器上有16 个PF 接口,这些接口就 ...

  9. ubuntu15.04下安装docker

    ​##获得更多资料欢迎进入我的网站或者 csdn或者博客园 最近听说docker很火,不知道什么东西,只知道是一个容器,可以跨平台.闲来无事,我也来倒弄倒弄.本文主要介绍:ubuntu下的安装,以及基 ...

  10. 190225RabbitMQ

    一.简单的RabbitMQ示例 生产者 # Author:Li Dongfei import pika connection = pika.BlockingConnection( pika.Conne ...