Lua數組與表


Lua表
table是 Lua中的一種數據結構, 既可以當做數組(array)使用, 又可以當做字典(類似 Java中的HashMap)來使用

在 Lua的8中數據結構中,
· 可以作為 table鍵的有: number, string, boolean, function, table, thread.
· 不能作為 table鍵的有: nil.
· userdata未知

表的構造
第一種方式:

-- 使用花括號來創建一個空表, 然后賦值
mytab = {}
mytab['x'] = 12
mytab[2] = 'hello'

第二種方式:

-- 創建表的時候, 同時初始化表數據
-- 表中存儲鍵值對數據, 格式如: [key] = value, 鍵和值可以是多種類型
mytab = {
['x'] = 12,
[2] = 'hello'
}

第三種方式

-- 同第二種方式, 不過非數字類型的鍵可以省略中括號, 數字類型不能省略
mytab = {
x = 12,
[2] = 'hello'
}

第四種方式

-- 想使用數字索引作為鍵時, 可以通過僅寫值的方式聲明,
-- 這樣 Lua會按照聲明順序為值建立從1開始的自增的索引
-- 如果表中都是數字索引, 那么此時的表就是一個數組
mytab = {
1, 2, 3
}

表的遍歷
第一種方式

-- 先構造一個表
mytab = {
11, 12, 13,
a = 'A',
b = 'B',
c = 'C'
}

-- 以下是最常用的兩種遍歷方式
-- 全表遍歷
-- 這種遍歷方式是按照 table中 key的 hash值排列順序來遍歷的,
-- 並非是 table中 key的定義順序, 並且不關心 key是否從1開始和 key是否以1遞增
for k, v in pairs(tab) do
print(k, v)
end

-- [[
output:
1 11
2 12
3 13
c C
b B
a A
]]

-- 僅遍歷表中的數組部分

-- 按照 key的大小順序來遍歷 (注意不是 key定義的順序)
-- 因為表中非數字鍵的鍵值對是使用 hash表存儲的, 這樣的數據是無序的, 所以無法遍歷
for k, v in ipairs(mytab) do
print(k, v)
end

--[[
output:
1 11
2 12
3 13
]]

 

-- 第三種方式
-- #mytab可以獲取到 mytab表中的數組部分的元素個數
for i = 1, #mytab do
print(mytab[i])
end

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM