lua中的table简单应用

在lua中,table作为一个很重要的数据结构,用来存放具有一定联系的相关的数据,将相关的数据以一定的结构存放在table中,用的时候在table中取出来。
1.创建table的方式
(1)先创建table,并赋值,例如:

local city = {[1] = "北京",[2] = "上海",[3] = "天津"}
local city1 = {"北京","上海","天津"}   --这是的没有下标的时候,下标默认从1开始 

(2)先创建一个空表再赋值

local city = {}
local name1 = "北京"
local name2 = "上海"
local name3 = "天津"
table.insert(city,name1)
table.insert(city,name2)
table.insert(city,name3)

一般不用第二种方式,如果知道table中的数据的话,直接在初始化的时候就赋值,那样使代码简洁,减少开销

2.对表常见的几种操作
table是一种数据结构,所以要一些方法对数据进行操作,下面就数据的增删改查讨论table
(1)增

table.insert(city,name1)  --city是一个已经存在的表,name是一个数据,现在就把name1插入到city表中了

(2)删
在table中,删数据的时候,必须找到数据对应的索引,得到对应的索引(索引可以是数字或者字符串,可以理解为key值)index,删除有以下方式:

table.remove(city,index)  --针对的是vector,index必须存在
city[index] = nil   --针对的是map,不过vector也可以,不管是在vector还是map中,没有一组数据的值是nil,是nil就是不存在

(3)改
就是找到table中的某一个值,并修改当前的值
city[index] = a //a是最后改的那个值

3.表的遍历
表的遍历一般分为以下几种形式:
(1)

for i = 1,table.getn(table) do
end  
--这种只是适用于下标是从1开始的,而且是连续的。table.getn(table)是得到表的长度的大小,一般不用table.getn(table)来得到table的大小,如果是vector,直接用#就可以

(2)

for k,v in pairstabledo
end
--这种适用于下标不是连续的,如果k值在for循环的处理过程中,不需要用的话,直接用_代替,这种循环针对map

(3)

for k,v in ipairstabledo
end
--这种适用于下标是连续的。遇到不连续的就会终止,针对的是vector

for k,v in pairs(tbtest) do 这样的遍历顺序并非是tbtest中table的排列顺序,而是根据tbtest中key的hash值排列的顺序来遍历的
for k,v in ipairs(tbtest) do 这样的循环必须要求tbtest中的key为顺序的,而且必须是从1开始,ipairs只会从1开始按连续的key顺序遍历到key不连续为止

–技巧
对于不同的情况,使用不同的数据结构,那么构成的table就不一样的了。
1.如果需要遍历很多次才能找到对应的数据的话,而且唯一确定key的值是不连续的,那么就可以把数据的key作为下标存放,例如存放学生得奖学金的信息的时候。由于不是每一个同学都有,那么学生的学号就不是有序的,可以以id为key,那么在查找某一个学生的时候,就不必完全遍历。
例如:

local stu = {
    [1001] = {id = 1001,name = "张三",money = 5000 },
    [1025] = {id = 1025,name = "李四",money = 8000 },
    [1014] = {id = 1014,name = "王五",money = 2000 }
}

–通过学生的id得到获得奖学金的金额

function stu_getStuToId(id)
    local money = 0
    if stu[id] then
        money = stu[id].money
    end
    return money
end

2.对于数据结构比较规律的话,就可以直接存在table中,例如存一个班级的学生的信息:有

local stu1 = {
    [1] = {id = 1001,name = "张三"},
    [2] = {id = 1002,name = "李四"},
    [3] = {id = 1003,name = "王五"}
}

local stu1 = {
    {id = 1001,name = "张三"},
    {id = 1002,name = "李四"},
    {id = 1003,name = "王五"}
}

遍历查找数据

for i = 1,table.getn(stu1) do
    local name = stu1[i].name
    local id = stu1[i].id
end
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值