lua table 详解

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

注意事项

  1. #获取表长度可能不准确
  2. 在 table 中不要使用 nil,如果一个元素要删除,直接 remove,不要用 nil 去代替。

猜你喜欢

转载自blog.csdn.net/weixin_45136016/article/details/129399257
今日推荐