สารานุกรมเป็นตารางที่เชื่อมชื่อหรือ กุญแจ กับค่าแทนดัชนี
ตัวอย่าง:
คําสั่งของสารานุกรม Luau
local pet = {Name = "Bobbie",Type = "Dog",}
ใช้สารานุกรมเมื่อต้องการที่จะป้อนชื่อค่า ไม่ใช่แค่รายการพวกมันตามลำดับที่เป็นอาร์เรย์ทำฝึกซ้อมการใช้สารานุกรมในบทแนะนำนี้โดยการปรับแต่งค่าที่เกี่ยวข้องกับผู้เล่น
สัญลักษณ์ของสารานุกรม
เช่นเดียวกับตัวเลข สารานุกรมจะถูกกำหนดให้กับตัวแปรด้วยเครื่องหมายเชิงเส้น {} คู่ค่ากุญแจ พิมพ์ตัวเลข และชื่อแปร
local playerNames = {player1 = "Zap",player2 = "Kel",}print(playerNames["player1"])
เพื่ออ้างอิงชิ้นส่วนหรือวัตถุอื่นๆ เป็นกุญแจใช้เครื่องหมายเลขเล็กและเครื่องหมายเลขใหญ่
local greenPart = workspace.GreenPartlocal redPart = workspace.RedPartlocal partList = {[greenPart] = true,[redPart] = false,}print(partList[redPart])
สร้างสารานุกรม
การใช้งานประจำวันของสารานุกรมคือการจัดระเบียบข้อมูลผู้เล่นหรือตัวละครขั้นตอนเหล่านี้สำรวจวิธีที่ข้อมูลตัวละครศัตรูทฤษฎีสามารถเก็บและเข้าถึงได้
ในสคริปต์ใหม่ สร้างสารานุกรมที่ชื่อว่า enemy
local enemy = {}คีย์แรกในสารานุกรมจะติดตามชื่อของศัตรูด้วยตัวแปรที่เรียกว่า Name
local enemy = {Name}กำหนดชื่อศัตรูให้กับกุญแจตามด้วยจุลภาค
local enemy = {Name = "Spike",}เพิ่มคู่คีย์-ค่าที่สองสำหรับจำนวนสุขภาพที่ศัตรูควรมี โปรดจำไว้ว่า พิมพ์แต่มูลค่าไม่จำเป็นต้องใช้
local enemy = {Name = "Spike",Health = 1000,}
ใช้ค่าสารานุกรม
มีสองวิธีในการเข้าถึงค่าสารานุกรม:
- tableName["keyName"] (สำคัญ, โปรดสังเกตถึงการอ้างอิง)
- tableName.keyName
local enemy = {Name = "Spike",Health = 1000,}print("The villain " .. enemy["Name"] .. " approaches!")print("The villain " .. enemy.Name .. " approaches!")
สไตล์ที่จะใช้มักขึ้นอยู่กับวัตถุประสงค์ของตารางสำหรับตารางที่ถือคอลเลกชันของค่าเช่นรายชื่อผู้เล่นในเซิร์ฟเวอร์ coders มักจะใช้ tableName["keyName"]สำหรับสารานุกรมที่ใช้อธิบายวัตถุโค้ดเดอร์มีแนวโน้มที่จะใช้ tableName.keyName มากขึ้น
เปลี่ยนค่าของสารานุกรม
การเปลี่ยนค่าของกุญแจเป็นเช่นเดียวกับตัวแปรอื่นใด; ใช้ตัวประกอบเท่ากัน =
ใต้ตาราง enemy ตั้งชื่อของศัตรูเป็นอย่างอื่น
local enemy = {Name = "Spike",Health = 1000,}enemy.Name = "Rana"print("The enemy's name is " .. enemy.Name)ทดสอบและตรวจสอบหน้าต่างออกผล
ตัวแปรที่มีอยู่แล้วเป็นกุญแจ
สารานุกรมสามารถโต้ตอบกับตัวแปรที่มีอยู่แล้วในส่วนอื่นๆ ของสคริปต์ได้ตัวอย่างการเขียนโค้ดต่อไปนี้ใช้ตัวแปรเพื่อเพิ่มชื่อผู้เล่นเป็นกุญแจเมื่อพวกเขาเข้าร่วมประสบการณ์แล้วจึงตั้งค่ามูลค่าจุดของพวกเขาเป็น 0
ใน ServerScriptService สร้างสคริปต์ใหม่ชื่อ PlayerPointsในสคริปต์, รับบริการผู้เล่นและสร้างสารานุกรมว่างเปล่าชื่อ playerPoints
local Players = game:GetService("Players")local playerPoints = {}เขียนฟังก์ชันท้องถิ่นเพื่อตั้งค่าจุดผู้เล่นด้วยพารามิเตอร์สําหรับตัวแปรผู้เล่นใหม่ เชื่อมฟังก์ชันกับเหตุการณ์ Players.PlayerAdded
local playerPoints = {}local function setPoints(newPlayer)endPlayers.PlayerAdded:Connect(setPoints)ในฟังก์ชัน เพิ่มตัวแปรเพื่อรับ Name ของผู้เล่น คุณสมบัติในทุกวัตถุ ผู้เล่น และคำสั่งพิมพ์สำหรับการทดสอบ
local function setPoints(newPlayer)local name = newPlayer.Nameprint("hello " .. name)endใส่ name ในสารานุกรม playerPoints เป็นคีย์และตั้งค่ามูลค่า, แต้มของผู้เล่นเป็น 0
local function setPoints(newPlayer)local name = newPlayer.Nameprint("hello " .. name)playerPoints[name] = 0endใช้ name เพื่อพิมพ์ชื่อของผู้เล่นและ playerPoints[name] เพื่อพิมพ์ค่าของกุญแจที่ตรงกับตัวแปร
local function setPoints(newPlayer)local name = newPlayer.Nameprint("hello " .. name)playerPoints[name] = 0print(name .. " has " .. playerPoints[name] .. " points.")endดำเนินโครงการและสังเกตผลผลิต
สคริปต์สำเร็จ
local Players = game:GetService("Players")
local playerPoints = {
}
local function setPoints(newPlayer)
local name = newPlayer.Name
print("hello " .. name)
playerPoints[name] = 0
print(name .. " has " .. playerPoints[name] .. " points.")
end
Players.PlayerAdded:Connect(setPoints)
ความท้าทายเสริมเติมตัวเลือก
ด้านล่างนี้เป็นความท้าทายบางอย่างที่ใช้กับการใช้สารานุกรมในรูปแบบที่แตกต่างกัน ดูว่าคุณสามารถสร้างโค้ดสำหรับเหล่านี้ได้หรือไม่
- สร้างส่วนกับดักที่สร้างความเสียหายเมื่อเวลาผ่านไปให้กับผู้เล่น เมื่อผู้เล่นสัมผัสกับกับดัก ความเสียหายพวกเขา รอ จากนั้นอนุญาตให้พวกเขาได้รับความเสียหายอีกครั้ง
- สร้างฟังก์ชันที่ตรวจสอบว่าผู้เล่นสองคนใดมีแต้มมากที่สุดโดยการเข้าถึงสารานุกรม
- สร้างรหัสลับโดยสร้างระบบการแลกเปลี่ยนสตริงหนึ่งเพื่อสร้างรหัส "ลับ"ตัวอย่างเช่น ตัวอักษร "A" สามารถสลับกับ "G" หรือคําว่า "แอปเปิล" สามารถสลับกับ "สีส้ม"
สารานุกรมและคู่()
pairs() เป็นฟังก์ชันที่มักใช้เพื่อจัดเตรียมผ่าน สารานุกรม ตัวอย่างเห็นได้ด้านล่าง
local myDictionary = {["Blue Player"] = "Ana",["Gold Player"] = "Binh",["Red Player"] = "Cate",}for key, value in pairs(myDictionary) doprint(key .. " is " .. value)end
pairs() สามารถใช้เพื่อทำงานกับกุญแจ ค่า หรือทั้งสองอย่างขององค์ประกอบสารานุกรมในลูป for ด้านล่าง ตัวแปรแรกคือกุญแจตัวแปรที่สองคือมูลค่าสารานุกรมที่คุณต้องการทำงานร่วมกับถูกส่งไปที่ pairs()
local inventory = {["Gold Bricks"] = 43,Carrots = 3,Torches = 2,}print("You have:")for itemName, itemValue in pairs(inventory) doprint(itemValue, itemName)end
กำลังติดตาม:
You have:43 Gold Bricks3 Carrots2 Torches
สรุป
สารานุกรมเป็นตารางที่ใช้คู่คีย์-ค่าแทนค่าที่จัดเรียงแล้วสารานุกรมและอาร์เรย์เริ่มต้นคล้ายกันโดยการกำหนดเครื่องหมายเล็บคลาสให้กับตัวแปรให้รายการแยกออกจากกันด้วยจุลภาคที่แยกกัน
พิมพ์แต่ค่าสามารถผสมประเภทข้อมูลได้โดยไม่มีปัญหา
วิธีที่สามารถเข้าถึงสารานุกรมได้สามารถสื่อสารวัตถุประสงค์ได้สารานุกรมของคุณสมบัติของศัตรูอาจจะถูกเข้าถึงด้วยตัวเลข dot ในขณะที่รายการชื่ออาจใช้ tableName[keyName]
เมื่อใช้เครื่องหมายการอ้างอิง โปรดระวัง; ชื่อกุญแจที่สร้างภายในตารางต้องได้รับการปฏิบัติเป็นสตริง: tableName["keyName"]อย่างไรก็ตามเมื่ออ้างถึงวัตถุเช่นชิ้นส่วนจะไม่จำเป็นต้องใช้การอ้างอิง: tableName[keyName]
สคริปต์จํานวนมากต้องผ่านสารานุกรมหรืออาร์เรย์ แต่คุณอาจไม่รู้เสมอเกี่ยวกับจุดเริ่มต้นและจุดสิ้นสุดของโครงสร้างข้อมูลเหล่านี้ตัวอย่างเช่น สารานุกรมของผู้เล่นอาจมีการเปลี่ยนแปลง หรือผู้เล่นอาจมีคลังสินค้าที่มีขนาดแตกต่างกัน
ในสถานการณ์เหล่านี้ คุณสามารถใช้ pairs() และ ipairs() ในลูป for เพื่อผ่านแต่ละองค์ประกอบโดยไม่มีจุดเริ่มต้นและจุดสิ้นสุดที่รู้จักคุณยังสามารถใช้การหมุนรอบทั่วไปผ่านคีย์วาร์ด in เพื่อหมุนผ่านองค์ประกอบโดยไม่จำเป็นต้องใช้ pairs() หรือ ipairs()