您好,登錄后才能下訂單哦!
使用表來統一表示Lua中的一切數據,是Lua區分于其他語言的一個特色。這個特色從最開始的Lua版本保持至今,很大的原因是為了在設計上保持簡潔。Lua表分為數組和散列表部分,其中數組部分不像其他語言那樣,從0開始作為第一個索引,而是從1開始。散列表部分可以存儲任何其他不能存放在數組部分的數據,唯一的要求就是鍵值不能為nil
。盡管內部實現上區分了這兩個部分,但是對使用者而言卻是透明的。使用Lua表,可以模擬出其他各種數據結構——數組、鏈表、樹等。
雖然設計上簡潔,并且對使用者更加透明、友好,但是如果使用不當,還會造成效率性能上的差異。
table 是 Lua 的一種數據結構用來幫助我們創建不同的數據類型,如:數字、字典等。
Lua table 使用關聯型數組,你可以用任意類型的值來作數組的索引,但這個值不能是 nil。
Lua table 是不固定大小的,你可以根據自己需要進行擴容。
Lua也是通過table來解決模塊(module)、包(package)和對象(Object)的。 例如string.format表示使用"format"來索引table string。
構造器是創建和初始化表的表達式。表是Lua特有的功能強大的東西。最簡單的構造函數是{},用來創建一個空表。可以直接初始化數組:
======================================================
序號 | 方法 & 用途 |
---|---|
1 | table.concat (table [, sep [, start [, end]]]): concat是concatenate(連鎖, 連接)的縮寫. table.concat()函數列出參數中指定table的數組部分從start位置到end位置的所有元素, 元素間以指定的分隔符(sep)隔開。 |
2 | table.insert (table, [pos,] value): 在table的數組部分指定位置(pos)插入值為value的一個元素. pos參數可選, 默認為數組部分末尾. |
3 | table.maxn (table) 指定table中所有正數key值中最大的key值. 如果不存在key值為正數的元素, 則返回0。(Lua5.2之后該方法已經不存在了,本文使用了自定義函數實現) |
4 | table.remove (table [, pos]) 返回table數組部分位于pos位置的元素. 其后的元素會被前移. pos參數可選, 默認為table長度, 即從最后一個元素刪起。 |
5 | table.sort (table [, comp]) 對給定的table進行升序排序。 |
table.concat()函數列出參數中指定table的數組部分從start位置到end位置的所有元素, 元素間以指定的分隔符(sep)隔開。
-- 簡單的table mytable = {} print("mytable 的類型是 : ", type(mytable)) mytable[1] = "Lua" mytable["wow"] = "修改前" print("mytable 索引為1 的元素是 : ", mytable[1]) print("mytable 索引為wow 的元素是 : ", mytable["wow"]) --alternatable和mytable的是指向同一個table alternatable = mytable print("alternatable 索引為1 的元素是 : ", alternatable[1]) print("alternatable 索引為wow 的元素是 : ", alternatable["wow"]) alternatable["wow"] = "修改后" print("mytable 索引為wow 的元素是 : ", mytable["wow"]) -- 釋放變量 alternatable = nil print("alternatable 是 ", alternatable) -- mytable仍然可以訪問 print("mytable 索引為wow 的元素是 : ", mytable["wow"]) mytable = nil; print("mytable 是 " , mytable);
運行結果:
=========================================================================
table.insert (table, [pos,] value):在table的數組部分指定位置(pos)插入值為value的一個元素. pos參數可選, 默認為數組部分末尾.
table.remove (table [, pos])返回table數組部分位于pos位置的元素. 其后的元素會被前移. pos參數可選, 默認為table長度, 即從最后一個元素刪起。
fruits = {"banana","orange","apple"} -- 在末尾插入 table.insert(fruits, "mango") print("索引為4的元素為 : ", fruits[4]); --在索引為2的鍵處插入 table.insert(fruits, 2, "grapes") print("索引為2的元素為 : ", fruits[2]) print("最后一個元素為 : ", fruits[5]) table.remove(fruits) print("移除后最后一個元素為 :",fruits[5])
運行結果:
=======================================================================
function table_maxn(t) local mn = 0; for k,v in pairs(t) do if mn < k then mn = k; end end return mn; end tb1 = {[1] = "a",[2] = "b",[3] = "c",[26] = "z",} print("tb1 長度 : ", #tb1) print("tb1最大值 : ", table_maxn(tb1))
運行結果:
后記:
在 Lua table 中我們可以訪問對應的key來得到value值,但是卻無法對兩個 table 進行操作。
因此 Lua 提供了元表(Metatable),允許我們改變table的行為,每個行為關聯了對應的元方法。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。