Lua中的table学习笔记
table 在 Lua 里是一种重要的数据结构,它可以说是其他数据结构的基础,通常的数组、记录、线性表、队列、集合等数据结构都可以用 table 来表示,甚至连全局变量(_G)、模块、元表(metatable)等这些重要的 Lua 元素都是 table 的结构。可以说,table 是一个强大而又神奇的东西。 table 特性 在之前介绍 Lua 数据类型时,也说过了 table 的一些特性,简单列举如下(详情可查看之前的介绍): 1.table是一个“关联数组”,数组的索引可以是数字或者是字符串 Lua 5.2.2 内置有以下 7 中对 table 操作的方法: concat 函数 table.concat 主要用来把表里的每个元素通过一个分隔符(separator)连接组合起来,用法: 复制代码 代码如下: table.concat(table,sep, start,end) 上面除 table 外, sep、start、end 这三个参数都是可选的,并且顺序读入的,如果没指定传入,函数 concat 会采用默认值(分隔符 sep 的默认值是空字符,start 的默认值是 1,end 的默认值是数组部分的总长)去执行。 复制代码 代码如下: local tbl = {"apple","pear","orange","grape"} print(table.concat(tbl)) print(table.concat(tbl,"、")) print(table.concat(tbl,"、",2)) print(table.concat(tbl,2,3)) 对于密集型的字符并接,table.concat 比用 ".." 连接更高效,下面是用 time 测试的效果: 复制代码 代码如下: local str = {} for i = 1,10000 do str[i] = "str" end print(table.concat(str)) --real 0m0.005s --user 0m0.003s --sys 0m0.002s 复制代码 代码如下: local str = "" for i = 1,10000 do str = str .. "str" end print(str) --real 0m0.041s --user 0m0.037s --sys 0m0.002s insert 函数 table.insert 用于向 table 的指定位置(pos)插入一个新元素,用法: 复制代码 代码如下: table.insert(table,pos value) 参数 pos 是可选,默认是 table 末尾位置。 复制代码 代码如下: local tbl = {"apple","grape"} table.insert(tbl,"watermelon") print(table.concat(tbl,"、")) table.insert(tbl,"、")) maxn 函数 table.maxn 是返回 table 最大的正数索引值,用法: 复制代码 代码如下: table.maxn (table) 如果不存在正数的索引值,则返回 0。 复制代码 代码如下: local tbl = {"apple","grape"} print(table.maxn(tbl)) local tbl = {"apple","grape",[26] = "watermelon"} print(table.maxn(tbl)) local tbl = {[-1] = "apple",[-2] = "pear",[-3] = "orange",[-4] = "grape"} print(table.maxn(tbl)) pack 函数 table.pack 是获取一个索引从 1 开始的参数表 table,并会对这个 table 预定义一个字段 n,表示该表的长度,用法: 复制代码 代码如下: table.pack(???) 该函数常用在获取传入函数的参数。 复制代码 代码如下: function table_pack(param,...) local arg = table.pack(...) print("this arg table length is",arg.n) for i = 1,arg.n do print(i,arg[i]) end end table_pack("test","param1","param2","param3") remove 函数 table.remove 用于删除 table 里某个值,用法: 复制代码 代码如下: table.remove (list [,pos]) 参数 pos 可选,默认为删除 table 最后一个元素,并且参数 pos 的类型只能是数字 number 类型。 复制代码 代码如下: local tbl = {"apple","grape"} table.remove(tbl,2) print(table.concat(tbl,"、")) table.remove(tbl) print(table.concat(tbl,"、")) sort 函数 table.sort 用于对 table 里的元素作排序操作,用法: 复制代码 代码如下: table.sort(table,comp) 参数 comp 是一个排序对比函数,它有两个参数 param1、param2,如果 param1 排在 param2 前面,那么排序函数返回 true,否则返回 false。 复制代码 代码如下: local tbl = {"apple","grape"} local sort_func1 = function(a,b) return a > b end table.sort(tbl,sort_func1) print(table.concat(tbl,"、")) local sort_func2 = function(a,b) return a < b end table.sort(tbl,sort_func2) print(table.concat(tbl,"、")) 参数 comp 可选,缺省 comp 的情况下是对表作升序排序。 复制代码 代码如下: local tbl = {"apple","grape"} table.sort(tbl) print(table.concat(tbl,"、")) unpack 函数 table.unpack 用于返回 table 里的元素,用法: 复制代码 代码如下: table.unpack(table,start,end) 参数 start 是开始返回的元素位置,默认是 1,参数 end 是返回最后一个元素的位置,默认是 table 最后一个元素的位置,参数 start、end 都是可选 复制代码 代码如下: local tbl = {"apple","grape"} print(table.unpack(tbl)) local a,b,c,d = table.unpack(tbl) print(a,d) print(table.unpack(tbl,2)) print(table.unpack(tbl,3)) 您可能感兴趣的文章:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |