Lua學習筆記(四):表和數組


在Lua中,表(table)是十分重要的一種數據結構,實際上Lua對於復雜數據類型也僅提供了表給我們,我們通過表可以實現我們需要的大部分重要的數據結構,比如數組。

table類型實現了關聯數組,關聯數組是一種具有特殊索引方式的數組;不僅可以通過整數來索引它,還可以使用字符串或其它類型的值(除了nil)來索引它。此外,table沒有固定的大小,可以動態得添加任意數量的元素到一個table中。

在Lua中,table既不是“值”,也不是“變量”,而是對象。可以將table想象成一種動態分配的對象,程序中僅僅有一個隊它們的引用(指針)。table的創建是通過“構造表達式”完成的,最簡單的構造表達式就是{}。

定義表和設置屬性

有3種定義屬性的方式和2種獲取屬性的方式:

1 obj = {a=100, d="hello"}--創建時設置屬性
2 obj.b = "abc"--使用 . 號創建
3 obj["c"] = true--使用索引創建
4 
5 print(obj.a)--使用 . 號創建
6 print(obj["b"])--使用索引創建

遍歷表

我們可以使用for循環對表進行遍歷,如下:

1 days = {"Suanday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"}
2 
3 --i 表示索引, v 表示值
4 for i,v in ipairs(days) do
5   print(i, v)
6 end

內置方法

Lua給我們提供了一些操作表的方法,比如table.concat等,所有的方法可以查看lua的幫助:http://www.lua.org/manual/5.2/contents.html#index

數組

Lua並沒有提供專門的數組對象來對數組進行操作,但是我們可以使用table來實現數組。

定義數組

不同於table表,初始化數組時不需要填寫key,而數組始終使用數字作為其key:

1 arr = {1, "abc", 2, true}--定義數組
2 print(arr[1])--注意索引從 1 開始

我們要特別注意的就是Lua中數組的索引是從1開始的。

使用內置方法處理數組

Lua為我們提供了一些標准的方法來處理數組,我們來具體看看。

table.insert

強指定的值插入到指定的位置,如下:

1 arr = {}
2 
3 for i = 1, 5 do
4   table.insert(arr,1,i)
5 end
6 
7 for key, var in ipairs(arr) do
8     print(key, var)
9 end

我們看下輸出:

1 1    5
2 2    4
3 3    3
4 4    2
5 5    1

我們每次都是把數據插入到第一個位置,所以以前的元素都會后移,故打印出來的值的結果就是從5到1。

table.maxn

獲取數組最大的索引值,由於lua索引是從1開始的,所以最大的索引值就是數組元素的總數。

還有其他的操作方法大家可以參考幫助,最后需要特別注意的一點是,小心不要操作到不存在的索引,會導致運行卡死。

獲取數組長度

在Lua中可以使用“#”號和table.maxn兩種方法來獲取數組的長度,我們看看他們之間的區別:

1 arr = {1,2,3,4,5,6}
2 print(#arr)--6
3 print(table.maxn(arr))--6
4 
5 arr[9] = 9
6 print(#arr)--6
7 print(table.maxn(arr))--9
  1. 都僅統計數字key的長度;
  2. #號是表示從1遞增到空項的長度;
  3. table.maxn是表示所有數字key中最大的那個key的索引值;

數字索引和字符串索引

在Lua中,數字key和字符串key是不會混合到一起的,我們可以具體來看看:

1 arr = {}
2 arr[1] = 1
3 arr["1"] = "abc"
4 print(#arr, table.maxn(arr), arr[1], arr["1"])--1 1 1 abc

 


免責聲明!

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



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