tolua 学习笔记 链表list.lua

关于数据结构的内容可以查看之前的文章
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

下面对list进行解释与实例:

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,博文只是作为学习笔记与大家分享,希望能与大家共同进步。


好了,祝进步。

每天进步一点点。

你可能感兴趣的:(Unity热更新)