文章目录
1.table 声明与访问
-- 初始化表
tbl = {
} -- 不可以是 tbl = nil
-- 赋值
-- table 赋值有以下两种(其中1是记录(record)风格,2是列表(list)风格)
local tbl ={
t1 = 1,
t2 = 2,
3,
4,
-- ["t3"] = 5, [3] = 6
-- ["1"] = 7, -- 不要这样去写
}
-- 访问
print(tbl.t1) -- 1 record 风格访问
print(tbl[1]) -- 3 list 风格访问
2. table 的两种遍历方式 pairs 和 ipairs
2.1 pairs
pairs 优先按顺序输出没有(默认)key的值,无序输出字母类型key或者数字类型key的键值,遇到nil不输出,但不会停止遍历
2.2 ipairs
ipairs 从第一个索引 key = 1 开始,依次输出所有的 key+1 的键值,遇到字母下标并不会结束遍历,只是不输出而已,如果遇到nil则退出;
2.3 例
tbl = {
["val1"] = "val1", 1, 2 , 3, nil, [5] = 5, [7] = 7, 6} -- tbl[5] = 6
print("-----------ipairs----------------")
for k,v in ipairs(tbl) do
print(k,v)
end
print("-----------pairs----------------")
for k,v in pairs(tbl) do
print(k,v)
end
输出:
-----------ipairs----------------
1 1
2 2
3 3
-----------pairs----------------
1 1
2 2
3 3
5 6
7 7
val1 val1
3.迭代器实现 ipairs 效果
function iter (a, i)
i = i + 1
local v = a[i]
if v then
return i, v
end
end
function ipairs (a)
return iter, a, 0
end
4.获取 table 长度
4.1 #table 获取长度
# 最好只用来获取数组类型(都是默认 key 值)的 table 长度
# 获取的 table 长度可能不准确
local tblTest1 ={
1, a = 2, 3,}
print(table.getn(tblTest1)) -- 2
4.2 自定义函数获取 table 长度
function getLength(tbl)
local len = 0
for k,v in pairs(t) do
len = len + 1
end
return len
end
tbl = {
2, 3, 4, 5}
tbl[2] = nil
print(#t) --this will output 4
print(length(t)) --this will output 3, because tbl[2] was deleted
注意事项
- #获取表长度可能不准确
- 在 table 中不要使用 nil,如果一个元素要删除,直接 remove,不要用 nil 去代替。