Lua基礎 table的幾種構造方式

2021-07-05 09:13:31 字數 2262 閱讀 3192



之前對於lua的研究都是紙上談兵,沒有真正的專案練手,現在公司的專案基本上都是用lua開發,是時候補充一下我那蹩腳的lua知識了。

基礎資料型別、表示式、迴圈結構什麼的我就不說了,這麼簡單的東西說了也要被大家噴。

今天我想說說table的幾種構造方式。

0.lua除錯工具——luaeditor

1.什麼是table?

table是lua最複雜最強大的資料結構,lua本身並不是物件導向語言,但是對物件導向中毒比較深的程式設計師,可以借助table」完美」地模擬 物件導向程式設計。最簡單地,我們可以把table理解為陣列,最複雜的,我們可以把table理解為」世間萬物」,因為它可以創造出很多你想象不到的東西。 乙個字,自由度非常大~!

2.如何建立乙個table?

local a = {} 

這樣就建立了乙個table了。

3.如何初始化乙個table

嗷,雖然建立table已經很複雜了,更複雜的還在後面,怎麼初始化table?看看下面的**:

local a =  

print(a["x"]); 

在luaeditor中建立乙個lua檔案,輸入以上**,儲存,然後按f5執行,我們將看到輸出視窗輸出了乙個數字:12。

這挺神奇的,感覺就像是在定義陣列,不是嗎?

table間的元素用逗號分隔,["x"] = 12代表構造乙個table元素,下標為」x」,值為12。

嗷~!我就等旁白問這個問題,旁白你笨蛋啊,我只是說table像陣列,我沒有說它就是陣列,table支援幾乎是所有型別的下標,包括函式。

4.有更簡潔的方式

這種初始化方式看起來太複雜了,有沒有簡單點的?看看下面的**:

local a =  

print(a["x"]); 

執行結果仍然是輸出12,也就是說,對於字串下標,我們可以省略方框和雙引號,但是數字下標不可以,千萬不要搞混了。

但是,a["x"]這種呼叫方式也很煩人不是嗎?程式設計師都很懶的,所以lua支援一下這種方式的呼叫:

local a =  

rint(a.x); 

輸出結果仍然是12,也就是說,對於字串下標,可以直接用a.x的形式呼叫,也是省略了方框和雙引號,初始化和呼叫方式的規則一樣,這樣大家就不會搞混了,記住,是字串下標才這麼做。

記住,是字串下標才這麼做。

記住,是字串下標才這麼做。

5.想要預設數字索引怎麼辦?

local a =  

沒關係,lua又為愛偷懶的程式設計師提供了一招,如下:

local a =  

print(a[1]); 

看看a[1]輸出的值是不是12?

再一次警告旁白,table類似陣列,但它絕對不是陣列。

6.更強大的應用之table的table

table什麼都能放,當然也能放table了,如下:

pre>

local a = ,  } 

print(a[1].x); 

<

pre>

我們定義了乙個table,命名為a,table有兩個元素,分別是兩個沒有名字的table,根據第5條所說的規則,沒有顯示指定下標,那lua就會預設給table的元素賦予下標(從1開始)。

因此,a的第乙個元素就是,呼叫a的第乙個元素的方式為:a[1]

由於a[1]又是乙個table,所以,再次呼叫table的x下標的值:a[1].x

這樣就ok了。

7.更強大的應用之函式下標

我們最後來試試更好玩的,用乙個函式當table的下標:

pre>

function test() 

print("hello table"); 

end 

local a =  

print(a[test]); 

<

pre>

定義了乙個函式test,然後用test作為下標定義了table的乙個元素,值為1。

這很奇怪不是嗎?但是有時候這樣確實很有用,這裡暫時不解釋。

ok,關於table的構造方式,暫時說這麼多,有點累了,晚安。

lua中table的基礎用法

lua中的table的基礎用法 在lua中,table是一種常見的資料的儲存結構,又分為兩種,vector和map 一 明確資料結構的用法 vector key 是從1開始的連續正整數 連續儲存 插入刪除 非尾端 較慢 可有序遍歷,可排序 vector就是一組資料結構中,key是從1開始的正整數,在...

Lua基礎學習 table表

table 是乙個 關聯陣列 在 lua 中可以用任意型別的值來作為陣列的索引,但是這個值不能是 nil,同樣也可以 用任意型別的值作為陣列的value,nil也可以。1 陣列的索引可以是數字或者是字串,所有索引值都需要用 和 括起來 如果是字串還可以去掉引號和中括號 但是數字下標不可以。注意 2 ...

XLua C 訪問Lua中的table的幾種方式

c 訪問lua中的全域性變數 c luaenv new luaenv luaenv.dostring require csharpcalllua 獲取lua中的全域性變數 string name luaenv.global.get name print name name int hp luaenv...