在lua中,表(table)是十分重要的一種資料結構,實際上lua對於複雜資料型別也僅提供了表給我們,我們通過表可以實現我們需要的大部分重要的資料結構,比如陣列。
table型別實現了關聯陣列,關聯陣列是一種具有特殊索引方式的陣列;不僅可以通過整數來索引它,還可以使用字串或其它型別的值(除了nil)來索引它。此外,table沒有固定的大小,可以動態得新增任意數量的元素到乙個table中。
在lua中,table既不是「值」,也不是「變數」,而是物件。可以將table想象成一種動態分配的物件,程式中僅僅有乙個隊它們的引用(指標)。table的建立是通過「構造表示式」完成的,最簡單的構造表示式就是{}。
有3種定義屬性的方式和2種獲取屬性的方式:
1 obj = --我們可以使用for迴圈對錶進行遍歷,如下:建立時設定屬性
2 obj.b = "
abc"
--使用 . 號建立
3 obj["
c"] = true
--使用索引建立45
print(obj.a)--
使用 . 號建立
6print(obj["
b"])--
使用索引建立
1 days = 23lua給我們提供了一些操作表的方法,比如table.concat等,所有的方法可以檢視lua的幫助:--i 表示索引, v 表示值
4for i,v in
ipairs(days) do
5print
(i, v)
6end
lua並沒有提供專門的陣列物件來對陣列進行操作,但是我們可以使用table來實現陣列。
不同於table表,初始化陣列時不需要填寫key,而陣列始終使用數字作為其key:
1 arr = --我們要特別注意的就是lua中陣列的索引是從1開始的。定義陣列
2print(arr[1])--
注意索引從 1 開始
lua為我們提供了一些標準的方法來處理陣列,我們來具體看看。
強指定的值插入到指定的位置,如下:
1 arr ={}23我們看下輸出:for i = 1, 5do4
table.insert(arr,1
,i)5
end6
7for key, var in
ipairs(arr) do
8print
(key, var)
9end
115我們每次都是把資料插入到第乙個位置,所以以前的元素都會後移,故列印出來的值的結果就是從5到1。2243
3344
2551
獲取陣列最大的索引值,由於lua索引是從1開始的,所以最大的索引值就是陣列元素的總數。
還有其他的操作方法大家可以參考幫助,最後需要特別注意的一點是,小心不要操作到不存在的索引,會導致執行卡死。
在lua中可以使用「#」號和table.maxn兩種方法來獲取陣列的長度,我們看看他們之間的區別:
1 arr =都僅統計數字key的長度;2print(#arr)--63
print(table.maxn(arr))--64
5 arr[9] = 9
6print(#arr)--67
print(table.maxn(arr))--
9
#號是表示從1遞增到空項的長度;
table.maxn是表示所有數字key中最大的那個key的索引值;
在lua中,數字key和字串key是不會混合到一起的,我們可以具體來看看:
1 arr ={}2 arr[1] = 1
3 arr["
1"] = "
abc"
4print(#arr, table.maxn(arr), arr[1], arr["
1"])--
1 1 1 abc
Lua陣列與表
table是 lua中的一種資料結構,既可以當做陣列 array 使用,又可以當做字典 類似 j a中的hashmap 來使用 在 lua的8中資料結構中,可以作為 table鍵的有 number,string,boolean,function,table,thread.不能作為 table鍵的有 ...
Lua學習之路(十) Lua 陣列
陣列,就是相同資料型別的元素按一定順序排列的集合,可以是一維陣列和多維陣列。lua 陣列的索引鍵值可以使用整數表示,陣列的大小不是固定的。一維陣列是最簡單的陣列,其邏輯結構是線性表。一維陣列可以用for迴圈出陣列中的元素,如下例項 array fori 0,2do print array i end...
雜湊表 hashtable和陣列
一列鍵值對資料,儲存在乙個table中,如何通過資料的關鍵字快速查詢相應值呢?不要告訴我乙個個拿出來比較key啊。大家都知道,在所有的線性資料結構中,陣列的定位速度最快,因為它可通過陣列下標直接定位到相應的陣列空間,就不需要乙個個查詢。而雜湊表就是利用陣列這個能夠快速定位資料的結構解決以上的問題的。...