Intro
表是一种动态分配的对象,程序只能操作指向表的引用(or指针)
支持结构体语法(
a.x = 1 )和索引语法( a['x'] = 1 )使用索引语法时,索引可以是string也可以是任意number(注意1.0 与 1等价,但是1.1 就不与 1等价)
使用结构体语法时只能用一个
表构造器
days = {"Monday", "Tuesday"} a = {x = 10, y = 20} -- a.x = 10, a.y = 20 b = {a = {x = 10, y = 20}, c = 1, 'first', 'second'} -- mixed > b[1] --> first -- equals to↓ b = {['a'] = {x = 10, y = 20}, ['c'] = 1, [1] = 'first', [2] = 'second'};
数组、序列
序列:表中从下标1开始连续不为nil的数组
#a表示a中序列的长度表的遍历
pairs迭代器用于随机遍历一个表
遍历顺序不定
T = {10, print, x = 12, k = 'hi'} for k, v in pairs(T) do print(k, v) end --[[ 1 10 2 function: 0000000065b9cff0 x 12 k hi ]]
ipairs迭代器用于遍历表中的列表部分
-- very bad coding style↓ T = {10, print, x = 12, k = 'hi', [4] = 13, 2} for k, v in ipairs(T) do print(k, v) end --[[ 1 10 2 function: 0000000065b9cff0 3 2 4 13 ]]
安全访问
希望方便的安全访问某个表(预先检查表是否为nil时),可以使用如下写法
E = {} zip = (((company or E).director or E).address or E).zipcode
表的标准库函数
t = {20, 30} table.insert(t, 1, 15) --> t = {15, 20, 30} table.remove(t, 2) --> t = {15, 30} -- lua 5.3后 table.move(t, 1, #a, 2) --> 把[1, #a]的元素的开头移到下标2 t[1] = 1