表格

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

表格資料類型可以儲存多個類型的值,這些值不能是 nil,包括 布林值數字字串函數 和其他表格。使用大括號 ({}) 來構造表格:


-- 將空表指定給變數 "t"
local t = {}
print(t) -- {}

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

有關用於操作表格的內建函數的更多資訊,請參見 table 庫。

數組

數組是一組有序的值。數組用於儲存數據集合,例如擁有特殊許可的玩家組。

創建數組

要使用 Luau 表格創建數組,按順序聲明值,用逗號分隔。


-- 構造一個包含三個項目的數組
local testArray = {"A string", 3.14159, true}
print(testArray)

從數組中讀取

要從數組中讀取,請在其引用後添加一對方括號並指定元素內的索引號 ([pos]):


-- 構造一個包含三個項目的數組
local testArray = {"A string", 3.14159, true}
print(testArray[1]) -- A string
print(testArray[2]) -- 3.14159
print(testArray[3]) -- true

寫入數組

要定義或重寫數組中某個索引的值,請在方括號 ([index]) 中聲明索引號,然後跟上 = 和該值:


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

遍歷數組

要遍歷數組,可以使用 for 循環。由於數組具有數值索引,您也可以使用從 1 到數組長度 (#array) 的數字 for 循環。


local testArray = {"A string", 3.14159, true, "New string"}
-- 通過一般迭代循環
for index, value in testArray do
print(index, value)
end
-- 使用數組長度運算符 (#) 進行迭代
for index = 1, #testArray do
print(index, testArray[index])
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]) -- New string
print(testArray[4]) -- Another new string

要在數組的開始和結束之間插入項目,請將位置值作為 table.insert() 的第二個參數。這將插入新項目並將後面的項目向上推一個索引位置。


local testArray = {"First item", "Next item"}
table.insert(testArray, 2, "NEW ITEM #2")
print(testArray[1]) -- First item
print(testArray[2]) -- NEW ITEM #2
print(testArray[3]) -- Next item

移除項目

要從數組中移除項目,請使用 table.remove()。這將移除指定位置的項目並將任何後續項目向後移動一個索引位置。


local testArray = {"First item", "Next item", "Last item"}
table.remove(testArray, 2)
print(testArray[1]) -- First item
print(testArray[2]) -- Last item

字典

字典是數組的擴展。字典儲存一組鍵值對,其中鍵可以是任何數字、字串或對象。

創建字典

要創建字典表,定義每個 ,然後加上 =。用逗號分隔每一個鍵值對:


local testDictionary = {
fruitName = "Lemon",
fruitColor = "Yellow",
sour = true
}

字典的鍵可以是數字、字串和對象。例如,鍵也可以是 Instance。要使用對象作為鍵,請在方括號中定義鍵 ([key]):


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

從字典中讀取

要從字典中讀取,請在其引用後添加一對方括號並指定鍵名。可以使用 (["key"]) 或 (.key) 直接引用字串鍵,或者使用變數值 ([key])。


local part = Instance.new("Part")
local testDictionary = {
partType = "Block",
[part] = true
}
-- 字串鍵需要加上引號
print(testDictionary["partType"]) -- Block
-- 或者使用 . 來索引沒有空格的字串鍵
print(testDictionary.partType) -- Block
-- 對於非字串鍵省略引號
print(testDictionary[part]) -- true

寫入字典

要定義或重寫新的或現有的字典鍵的值,請在方括號中聲明鍵名稱 ([key]) 或者,如果鍵是一個字串,請使用 (.key),然後加上 = 和該值:


local testDictionary = {
fruitName = "Lemon",
sour = true
}
-- 更改現有鍵的值
testDictionary["fruitName"] = "Cherry"
testDictionary.sour = false
-- 插入新的鍵值對
testDictionary.fruitCount = 10
print(testDictionary.fruitName) -- Cherry
print(testDictionary.sour) -- false
print(testDictionary.fruitCount) -- 10

遍歷字典

要遍歷字典,可以使用 for 循環:


local testDictionary = {
fruitName = "Lemon",
fruitColor = "Yellow",
sour = true
}
for key, value in 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 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)

深複製

要複製一個包含嵌套表格的更複雜的表格,您需要使用類似於以下的遞歸函數:


-- 用於深複製表格的函數
local function deepClone(original)
-- 為複製定義新的表格
local clone = table.clone(original)
-- 遍歷原始表格以檢查表格值
-- 如果發現值為表格,則將其深複製到鍵 (索引)
for key, value in original do
if type(value) == "table" then
clone[key] = deepClone(value)
end
end
-- 返回深複製表格的最終副本
return clone
end

有了這個函數,您可以如下進行深複製:


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

冻结表格

凍結一個表格使其變為唯讀,這對於創建不希望更改的常量值非常有用。凍結是永久性的;沒有 "解凍" 或 "融化" 方法。要檢查表格是否被凍結,請使用 table.isfrozen()

淺凍結

要凍結一個沒有嵌套表格的表格,Luau 提供了 table.freeze() 方法。


local target = {
key = "value",
engine = "Roblox",
playerID = 505306092
}
table.freeze(target)
target.playerID = 1 --> 嘗試修改只讀表格

深凍結

要凍結一個內部有嵌套表格的更複雜的表格,使用類似於以下的遞歸函數:


local function deepFreeze(target)
-- 淺凍結該表格
table.freeze(target)
-- 檢查表格的每個鍵並在它是表格時凍結它
for _, value in target do
-- 確保值沒有被凍結;如果已經凍結,將發生錯誤
if type(value) == "table" and table.isfrozen(value) == false then
deepFreeze(value)
end
end
end

有了這個函數,您可以如下深凍結一個表格:


local target = {
key = "value",
playerInfo = {
playerID = 505306092,
playerName = "PlayerName"
},
otherInfo = {
{
{1, 3, 5, 7, 9}
}
}
}
deepFreeze(target)
target.playerInfo.playerID = 1 --> 嘗試修改只讀表格
©2026 Roblox Corporation、Roblox、Roblox 標誌及 Powering Imagination 是我們在美國及其他國家地區的部分註冊與未註冊商標。