关于数据结构的内容可以查看之前的文章
http://blog.csdn.net/jason_520/article/details/54173685。
LuaFramework_UGUI中有一个list.lua,它是一个双向链表,即一个元素有两个指针,指向它的前一个元素和后一个元素。这里的元素指的是table,获取值的方式是:xxx.value。同C#的链表类似。
本文笔者参考学习文章http://blog.csdn.net/lyh916/article/details/51043044
push(v) --往list尾添加v。
pop() --移除list最尾元素,并返回。
unshift(v) --将v添加到list最前面。
shift() --移除list最前面元素,并返回。
remove(iter) --移除iter元素。
find(v, iter) --从iter这个元素开始向后查找,如果找到值为v的,则返回那个元素。如果iter为nil,则从list的第一个元素开始寻找。注意返回的是第一个符合条件的 。
findlast(v, iter) 与find相反,向前查找
next(iter) --返回iter的下一个元素,以及那个元素的值,多值返回,注意当iter为nil时,如果存在self.first 则返回self.first, self.first.value,否则返回nil。
items() --主要用于遍历 从first往last,见clone。
prev(iter) --与next相反。
reverse_items() --与items相反。
erase(value) --移除值为value的元素。
insert(v, iter) --在iter后面插入值为v的元素 。
head() --返回第一个元素的值。
tail() --返回最后一个元素的值。
clone() --复制一个list 。
实例:
--UserInfo.lua
UserInfo=
{
id="",
name="",
password="",
}
UserInfo.__index=UserInfo;
function UserInfo.new(id,name,password)
local o={};
setmetatable(o,self);
o.id=id;
o.name=name;
o.password=password;
return o;
end
--UserInfoList.lua
local list = require "list";
require "UserInfo";
UserInfoList=list:new();
c=UserInfo:new(2,"Jason1",123); --方便查找时使用
UserInfoList:push(UserInfo:new(1,"Jason",123));
UserInfoList:push(c);
UserInfoList:push(UserInfo:new(3,"Jason2",123));
UserInfoList:push(UserInfo:new(4,"Jason3",123));
UserInfoList:push(UserInfo:new(5,"Jason4",123));
UserInfoList:push(UserInfo:new(6,"Jason5",123));
UserInfoList:push(UserInfo:new(7,"Jason6",123));
UserInfoList:push(UserInfo:new(8,"Jason7",123));
for item in UserInfoList:items() do
local v = item.value;
print("id:"..v.id,"name:"..v.name,"password:"..v.password);
end
UserInfoList:pop();
print("\n");
print("移除最后一个元素结果:");
for item in UserInfoList:items() do
local v = item.value;
print("id:"..v.id,"name:"..v.name,"password:"..v.password);
end
a=UserInfo:new(4,"Jason4",123);
UserInfoList:unshift(a);
print("\n");
print("将a添加到list最前面:");
for item in UserInfoList:items() do
local v = item.value;
print("id:"..v.id,"name:"..v.name,"password:"..v.password);
end
UserInfoList:shift();
print("\n");
print("移除list最前面元素:");
for item in UserInfoList:items() do
local v = item.value;
print("id:"..v.id,"name:"..v.name,"password:"..v.password);
end
for i in UserInfoList:items() do
if(i.value.id==1) then
UserInfoList:remove(i);
end
end
print("\n");
print("移除id为1的元素:");
for item in UserInfoList:items() do
local v = item.value;
print("id:"..v.id,"name:"..v.name,"password:"..v.password);
end
print("\n");
print("查找C是否在列表中,不存在返回nil:");
print(UserInfoList:find(c))
print("\n");
print("另一种遍历方式:");
local iter=nil;
for i=1,UserInfoList.length ,1 do
iter=UserInfoList:next(iter);
local v=iter.value;
print("id:"..v.id,"name:"..v.name,"password:"..v.password);
end
笔者也是刚刚接触LuaFramework,博文只是作为学习笔记与大家分享,希望能与大家共同进步。
好了,祝进步。
每天进步一点点。