桌子

*此內容是使用 AI(Beta 測試版)翻譯,可能含有錯誤。若要以英文檢視此頁面,請按一下這裡

桌子資料類型可以存儲多種類型不是 nil 的值,包括 booleans、1> 數量1>、4> 字串4>、7> 函數7> 和其他桌子。用 0> 桿體括號 ( 3> )3>):


-- 建造"t"變量的空桌子
local t = {}
print(t) -- {}

您可以使用表作為 陣列字典 。陣列使用排序列表的數字作為索引,但字典可以有數字、字串和對象作為索引。

有關使用表作業的內置功能的更多資訊,請參閱 table 圖書館。

陣列

陣列 是由特殊權限的玩家組成的資料集。陣列有助於存儲資料集,例如玩家群組。

建立陣列

若要使用 Luau 桌子創建陣列,請以連號分開的順序宣告值。


-- 建造三個項目的陣列
local testArray = {"A string", 3.14159, workspace.Camera}
print(testArray)

從陣列閱取

要從陣列中閱取,請在其參考後加上兩個方形括號,並指定元素內的索引數([pos]):


-- 建造三個項目的陣列
local testArray = {"A string", 3.14159, workspace.Camera}
print(testArray[1]) -- 一個字串
print(testArray[2]) -- 3.14159
print(testArray[3]) -- Camera

擷取陣列的資料

要在索引中定義或重寫一個陣列的值,請在方塊內加入 [index]= 之後的值,並且將值指定為:


local testArray = {"A string", 3.14159, workspace.Camera}
testArray[2] = 12345
testArray[4] = "New string"
print(testArray[2]) --12345
print(testArray[4]) -- New string

在陣列上迭代

要在陣列上重複,您可以使用 for 循環。因為陣列有數量索引,您也可以使用 for 數量索引從 1 到陣列長度 ( 2># array2> )。


local testArray = {"A string", 3.14159, workspace.Camera, "New string"}
-- 使用一般循環
for index, value in testArray do
print(index, value)
end
-- 使用 array 長度操作器 (#) 來重複
for index = 1, #testArray do
print(index, testArray[index])
end
-- [[ 輸出結果:
1 A string
2 3.14159
3 Camera
4 New string
1 A string
2 3.14159
3 Camera
4 New string
]]

插入項目

有兩種內置方法可以將一個項目插入 end 的一個陣列的 end:

  • 通過參考陣列和項目值傳递給 Luau 的 table.insert() 函數。
  • 使用 array[#array+1] 語法將新項目添加到陣列。

local testArray = {"A string", 3.14159}
table.insert(testArray, "New string")
testArray[#testArray+1] = "Another new string"
print(testArray[3]) -- 新字串
print(testArray[4]) -- Another new string

要在陣列的開始和結束之間插入一個項目,請包含位置值作為 table.insert() 的第二個參數。這會插入新項目,並將下一個項目推到一個索引位置。


local testArray = {"First item", "Next item"}
table.insert(testArray, 2, "NEW ITEM #2")
print(testArray[1]) -- 第一個項道具
print(testArray[2]) -- 新項目 #2
print(testArray[3]) -- Next item

移除項目

要從陣列中移除一個項目,請使用 table.remove()。這會移除該項目在指定位置,並將任何跟隨項目移動回一個索引位置。


local testArray = {"First item", "Next item", "Last item"}
table.remove(testArray, 2)
print(testArray[1]) -- 第一個項道具
print(testArray[2]) -- Last item

典藏

字典是擴展陣列的一個延伸。字典存儲一組鑰匙值對,其中鑰匙可以是任何數字、字串或對物件。

建立字典

要建立字典表,定義每個 之後的 =value 。用分號分開每個鍵值對,並使用 2> 值2> 。


local testDictionary = {
FruitName = "Lemon",
FruitColor = "Yellow",
Sour = true
}

字典的鑰匙可以是數字、字串和對象。例如,鑰匙可以也是一個 Instance 。要使用對象作為鑰匙,請在方塊內 ( [key] 宣告鑰匙:


local part = Instance.new("Part")
local testDictionary = {
PartType = "Block",
[part] = true
}

從字典閱取

要從字典閱取,請在其參考後加上兩個括號,並指定鑰匙名。直接使用引號 (["key"] )或變量值 ( [鍵ey>5>]) 來參考字串。


local part = Instance.new("Part")
local testDictionary = {
PartType = "Block",
[part] = true
}
-- 包括對字串鑰匙的引言
print(testDictionary["PartType"]) -- 方塊
-- 省略非字串鑰匙的引號
print(testDictionary[part]) -- true

寫作詞典

要定義或重寫新或現有典鍵的值,請在括號 ( [key] 之後,跟隨 = 和值值:


local testDictionary = {
FruitName = "Lemon",
Sour = true
}
-- 變更現有鑰匙的值
testDictionary["FruitName"] = "Cherry"
testDictionary["Sour"] = false
-- 插入新的鑰匙值組
testDictionary["FruitCount"] = 10
print(testDictionary["FruitName"]) -- 櫻桃
print(testDictionary["Sour"]) -- 否
print(testDictionary["FruitCount"]) -- 10

在字典上迭代

要在字典上重複,請使用 pairs() 函數在 for 循環中:


local testDictionary = {
FruitName = "Lemon",
FruitColor = "Yellow",
Sour = true
}
for key, value in pairs(testDictionary) do
print(key, value)
end
-- [[ 輸出結果:
FruitName Lemon
Sour true
FruitColor Yellow
]]

移除鑰匙值對

要從字典中移除或清除鑰匙值對,將其值設為 nil 的鑰匙。


local testDictionary = {
FruitName = "Lemon",
FruitColor = "Yellow",
Sour = true
}
testDictionary["Sour"] = nil
for key, value in pairs(testDictionary) do
print(key, value)
end
-- [[ 輸出結果:
FruitName Lemon
FruitColor Yellow
]]

桌子作為參考

如果您在新變數中存儲桌子,Luau 不會創建桌子的副本。 相反,變數變成了一個 引用 ,或指向原始桌子。 任何對桌子的引用都會反映原始桌子的任何變更:


local originalArray = {10, 20}
local arrayReference = originalArray
print("Original:", originalArray[1], originalArray[2])
print("Reference:", arrayReference[1], arrayReference[2])
-- 在原始阵陣列中變更值
originalArray[1] = 1000
originalArray[2] = 2000
print("Reference:", arrayReference[1], arrayReference[2])
-- [[ 輸出結果:
Original: 10 20
Reference: 10 20
Reference: 1000 2000
]]

複製桌子

淺色複製人

要複製任何沒有任何子表的桌子,Luau提供table.clone() 方法。


local original = {
key = "value",
engine = "Roblox",
playerID = 505306092
}
local clone = table.clone(original)

深度複製

要複製內有重疊桌子的更複雜的表,您需要使用類似以追蹤中的 recursive 函數:


-- 一種用於深度複製表的函數
local function deepCopy(original)
-- 為複製品定義新表
local copy = {}
-- 從原始桌子複製
for key, value in original do
-- 如果值的類型是欄表,請將其深度複製到鑰匙 (索引)
-- 否則 (或) 類型不是表,而是要將預設值指定為索引
copy[key] = type(value) == "table" and deepCopy(value) or value
end
-- 返回深度複製桌的最終複製品
return copy
end

有了功能,您可以作出如下深度複製:


local original = {
key = "value",
playerInfo = {
playerID = 505306092,
playerName = "PlayerName"
},
otherInfo = {
{
{1, 3, 5, 7, 9}
}
}
}
local clone = deepCopy(original)

冰凍桌子

將一張桌子凍結會使其只能閱取,這對於不想要變更的常量值很有用。凍結是永久的;沒有「凍結解凍」或「凍結解凍」方法。要檢查桌子是否凍結,請使用 table.isfrozen()

淺凍結

要凍結任何沒有任何階層的桌子,Luau提供table.freeze() 方法。


local target = {
key = "value",
engine = "Roblox",
playerID = 505306092
}
table.freeze(target)
target.playerID = 1 --> attempt to modify a readonly table

深度凍結

要結合複雜表中的擷取函數,使用類似以追蹤中的 recursive 函數:


local function deepFreeze(target)
-- 將表淺凍結
table.freeze(target)
-- 檢查表中的每個鑰匙,並將其凍結,如果是桌子
for _, v in target do
if type(v) == "table" then
deepFreeze(v)
end
end
end

有了功能在空間,您可以深凍桌子如下:


local target = {
key = "value",
playerInfo = {
playerID = 505306092,
playerName = "PlayerName"
},
otherInfo = {
{
{1, 3, 5, 7, 9}
}
}
}
deepFreeze(target)
target.playerInfo.playerID = 1 --> attempt to modify a readonly table