ตาราง

*เนื้อหานี้แปลโดยใช้ AI (เวอร์ชัน Beta) และอาจมีข้อผิดพลาด หากต้องการดูหน้านี้เป็นภาษาอังกฤษ ให้คลิกที่นี่

ประเภทข้อมูลตาราง สามารถเก็บข้อมูลหลายค่าของประเภทใดก็ได้ที่ไม่ใช่ รวมถึง booleans , number , string , ฟังก์ชัน และโต๊ะอื่น ๆสร้างตารางด้วยเครื่องหมายเชิงโค้ง ( {} ):


-- สร้างโต๊ะว่างที่ได้รับตัวแปร "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]) -- สตริง
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 ได้เนื่องจากตัวเลขในอาร์เรย์มีดัชนีทางตัวเลข คุณยังสามารถใช้ลูปเลข for จาก 1 ไปยังความยาวของอาร์เรย์ ( #array )


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

เพิ่มรายการ

มีสองวิธีที่สร้างไว้ล่วงหน้าในการสอดองค์ประกอบลงในที่สิ้นสุดของแอร์ราย์ end :

  • ส่งอ้างอิงไปยังตัวเลขและมูลค่ารายการให้กับฟังก์ชัน Luau's table.insert() ของ Luau
  • เพิ่มรายการใหม่ลงในคอลเลกชันโดยใช้สัญลักษณ์ 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

สารานุกรม

สารานุกรมเป็นส่วนขยายของตัวเลข สารานุกรมเก็บชุดของคู่คีย์-ค่าที่สามารถเป็นตัวเลข สตริง หรือวัตถุใดก็ได้

สร้างสารานุกรม

เพื่อสร้างตารางสารานุกรม กำหนดแต่ละ คีย์ ตามด้วย = และ ค่า แยกแต่ละคู่คีย์-ค่าด้วยจุลภาค:


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

กุญแจสำหรับสารานุกรมสามารถเป็นตัวเลข สตริง และวัตถุได้ตัวอย่างเช่น กุญแจอาจเป็น Instance ด้วยเพื่อใช้วัตถุเป็นกุญแจ ประกาศกุญแจในเครื่องหมายที่เป็นเหลี่ยม ( [key] ):


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

อ่านจากสารานุกรม

เพื่ออ่านจากสารานุกรม เพิ่มวงเล็บคู่หลังจากการอ้างอิงและระบุชื่อกุญแจอ้างถึงคีย์สตริงโดยตรงโดยใช้เครื่องหมายอ้อย ( ["key"] ) หรือใช้ค่าแปร ( [key] )


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

ซ้ำไปที่สารานุกรม

เพื่อตรวจสอบไดเรกทอรี ให้ใช้ฟังก์ชัน global 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)

โคลนลึก

เพื่อคัดลอกตารางที่ซับซ้อนมากขึ้นพร้อมกับตารางซ้อนภายใน กำลังติดตาม:


-- ฟังก์ชันที่ใช้สําหรับการสําเนาลึกของตาราง
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

แช่แข็งลึก

เพื่อแช่แข็งโต๊ะที่ซับซ้อนมากขึ้นพร้อมกับโต๊ะที่ซ้อนอยู่ภายใน กำลังติดตาม:


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