lua表(table)

table 是 Lua 的一種數據結構用來幫助我們創建不同的數據類型,如:數組、字典等。
Lua table 使用關聯型數組,你可以用任意類型的值來作數組的索引,但這個值不能是 nil。
Lua table 是不固定大小的,你可以根據自己需要進行擴容。

table(表)的構造
構造器是創建和初始化表的表達式。表是Lua特有的功能強大的東西。最簡單的構造函數是{},用來創建一個空表。可以直接初始化數組:

-- 初始化表
mytable = {}

-- 指定值
mytable[1]= "Lua"

-- 移除引用 ,刪除表
mytable = nil
-- lua 垃圾回收會釋放內存

mytable = {
  [2] = 100 ,
  index = 200
}
--[2]索引爲2 
--index 變量   

--這就是tbale的字典表現形式

for k,v in pairs(mytable) do
  print("鍵:"..k)
  print("值:"..v)
end

--[[結果:
鍵:2
值:100
鍵:index
值:200
]]]
訪問表中的元素

用.來訪問 table中變量的值

mytable = {
  [2] = 100 ,
  index = 200
}
print(mytable.index)
--給表中的元素賦值

mytable.index = 300
--此時 mytable中的元素index = 300
for k,v in pairs(mytable) do
  print(v)
end

結果:
200
300

當我們爲 table a 並設置元素,然後將 a 賦值給 b,則 a 與 b 都指向同一個內存。如果 a 設置爲 nil ,則 b 同樣能訪問 table 的元素。如果沒有指定的變量指向a,Lua的垃圾回收機制會清理相對應的內存。
以下實例演示了以上的描述情況:
代碼:

-- 簡單的 table
mytable = {}
print("mytable 的類型是 ",type(mytable))

mytable[1]= "Lua"
mytable["wow"] = "修改前"
print("mytable 索引爲 1 的元素是 ", mytable[1])
print("mytable 索引爲 wow 的元素是 ", mytable["wow"])

-- alternatetable和mytable的是指同一個 table
alternatetable = mytable

print("alternatetable 索引爲 1 的元素是 ", alternatetable[1])
print("mytable 索引爲 wow 的元素是 ", alternatetable["wow"])

alternatetable["wow"] = "修改後"

print("mytable 索引爲 wow 的元素是 ", mytable["wow"])

-- 釋放變量
alternatetable = nil
print("alternatetable 是 ", alternatetable)

-- mytable 仍然可以訪問
print("mytable 索引爲 wow 的元素是 ", mytable["wow"])

mytable = nil
print("mytable 是 ", mytable)

結果:
mytable 的類型是 table
mytable 索引爲 1 的元素是 Lua
mytable 索引爲 wow 的元素是 修改前
alternatetable 索引爲 1 的元素是 Lua
mytable 索引爲 wow 的元素是 修改前
mytable 索引爲 wow 的元素是 修改後
alternatetable 是 nil
mytable 索引爲 wow 的元素是 修改後
mytable 是 nil

Table 操作(內部方法)

1,Table 連接
我們可以使用 concat() 輸出一個列表中元素連接成的字符串:
代碼:

fruits = {"banana","orange","apple"}
-- 返回 table 連接後的字符串
print("連接後的字符串 ",table.concat(fruits))

-- 指定連接字符 
print("連接後的字符串 ",table.concat(fruits,"-"))

-- 指定索引來連接 table
print("連接後的字符串 ",table.concat(fruits,"···", 2,3))

結果:
連接後的字符串 bananaorangeapple
連接後的字符串 banana-orange-apple
連接後的字符串 orange···apple

2,table刪除 插入 元素

1)insesrt()插入

.指定位置插入

fruits = {"banana","orange","apple"}

table.insert(fruits,1,"you")

print(table.concat(fruits,","))

結果:
you,banana,orange,apple

.默認插入爲表的尾部

fruits = {"banana","orange","apple"}

table.insert(fruits,"you")

print(table.concat(fruits,",")) --每個元素的分隔符爲,

結果:
banana,orange,apple,you

2)remove()刪除
.默認刪除尾部元素

fruits = {"banana","orange","apple"}
table.remove(fruits)
print(table.concat(fruits,","))

結果:
banana,orange
.刪除指定位置元素

fruits = {"banana","orange","apple"}
table.remove(fruits,2)
print(table.concat(fruits,","))

結果:
banana,apple

Table排序函數 sort

.默認從小到大排序

fruits = {1,2,4,3}
table.sort(fruits)
print(table.concat(fruits,","))
fruits = {"banana","orange","apple"}
table.sort(fruits)
print(table.concat(fruits,","))

結果:
1,2,3,4
apple,banana,orange

.根據模式排序
語法:table.sort(table,function)
按照從大到小排序
代碼:

fruits = {2,1,4,3}
--排序規則函數
local function sortMAx(a,b) --a,b爲表中元素
    return a > b
end
table.sort(fruits,sortMAx)--表,排序規則函數
print(table.concat(fruits,","))

結果:
4,3,2,1

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章