ประเภทข้อมูล ตาราง สามารถเก็บข้อมูลหลายประเภทที่ไม่ใช่ nil รวมถึง booleans 1> ตัวเลข1> 4> สตริง4> 7> ฟังก์ชัน</
-- สร้างตารางที่ว่างไว้ที่แป้น "t"local t = {}print(t) -- {}
คุณสามารถใช้ตารางเป็น รายการ หรือ พจนานุกรม รายการใช้รายการจำนวนเป็นดัชนี แต่พจนานุกรมสามารถมีตัวเลข สตริง และตัวอักษรได้เป็นดัชนี
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับคุณสมบัติที่อยู่ในตัวสำหรับการทำงานกับตารางโปรดดูไฟล์ table
รายการ
รายการนิยม คือรายการที่มีลำดับ รายการใช้fulในการเก็บคอลเลกชันของข้อมูล เช่น กลุ่มผู้เล่นที่มีสิทธิพิเศษ
การสร้างรายการ
เพื่อสร้างรายการโดยใช้ตาราง 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] = 12345testArray[4] = "New string"print(testArray[2]) --12345print(testArray[4]) -- New string
ทำซ้ำรายการโดยใช้แมทริค
เพื่อทำซ้ำรายการ คุณสามารถใช้วงเลข for ห่วง เพราะรายการมีด้วยหัวข้อหลักของจำนวน คุณยังสามารถใช้วงเลข for จาก 1 ไปยังความยาวของรายการ (
local testArray = {"A string", 3.14159, workspace.Camera, "New string"}-- ใช้วิทยุทั่วไปเพื่อเรียกfor index, value in testArray doprint(index, value)end-- ทำซ้ำโดยใช้ตัวปรับความยาวของรายการ (#)for index = 1, #testArray doprint(index, testArray[index])end--[[ ผลลัพธ์ออก:1 A string2 3.141593 Camera4 New string1 A string2 3.141593 Camera4 New string]]
การใส่ไอเทม
มีวิธีการอิงสองอย่างที่อยู่ในตัวเองของรายการในตำแหน่ง ต้น ของค่าย่อ:
- ส่งอ้างอิงไปยังแผงและมูลค่ารายการให้กับ Luau's 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]) -- รายการใหม่ #2print(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 แยกแต่ละคู่กุญแจ-ค่าด้วยจุลภาค:
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"] = 10print(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) doprint(key, value)end--[[ ผลลัพธ์ออก:FruitName LemonSour trueFruitColor Yellow]]
การลบคู่สัญลักษณ์
เพื่อลบหรือลบคู่ของค่าตัวอักษรจากพจนานุกรม ตั้งค่าค่าของมันเป็น nil
local testDictionary = {FruitName = "Lemon",FruitColor = "Yellow",Sour = true}testDictionary["Sour"] = nilfor key, value in pairs(testDictionary) doprint(key, value)end--[[ ผลลัพธ์ออก:FruitName LemonFruitColor Yellow]]
ตารางเป็นอ้างอิง
หากคุณเก็บตารางในแปรคือใหม่ Luau จะไม่สร้างคันเก็บข้อมูลของตารางนั้น แทนที่, แปรเป็น อ้างอิง หรือป้ายการ์ดไปยังตารางเดิม การอ้างอิงใด ๆ ไปยังตารางสะท้อนการเปลี่ยนแปลงใด
local originalArray = {10, 20}local arrayReference = originalArrayprint("Original:", originalArray[1], originalArray[2])print("Reference:", arrayReference[1], arrayReference[2])-- เปลี่ยนค่าใน mat阵originalArray[1] = 1000originalArray[2] = 2000print("Reference:", arrayReference[1], arrayReference[2])--[[ ผลลัพธ์ออก:Original: 10 20Reference: 10 20Reference: 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)
ตารางแช่แข็ง
การแช่แข็งตารางทำให้อ่านเท่านั้น ซึ่งเป็นประโยชน์สำหรับการสร้างค่าคงที่ที่คุณไม่ต้องการเปลี่ยนแปลง การแช่แข็งเป็นถาวร; ไม่มีวิธี "ไม่แช่แข็ง" หรือ "แช่แข็ง" ให้
ระดับต่ำ
เพื่อแช่แข็งตารางโดยไม่มีตารางที่ซ้องกัน 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