แนะนำสารานุกรม

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

สารานุกรมเป็นตารางที่เชื่อมชื่อหรือ กุญแจ กับค่าแทนดัชนี

ตัวอย่าง:

คําสั่งของสารานุกรม Luau

local pet = {
Name = "Bobbie",
Type = "Dog",
}

ใช้สารานุกรมเมื่อต้องการที่จะป้อนชื่อค่า ไม่ใช่แค่รายการพวกมันตามลําดับเหมือนที่อาร์เรย์ทําฝึกซ้อมการใช้สารานุกรมในบทแนะนำนี้โดยการปรับแต่งค่าที่เกี่ยวข้องกับผู้เล่น

คํากำหนดสัญลักษณ์ของสารานุกรม

เช่นเดียวกับอาร์เรย์ สารานุกรมจะถูกกำหนดให้กับตัวแปรด้วยเครื่องหมายเล็บคู่ {} คู่ค่ากุญแจ จะถูกเก็บไว้ในบรรทัดแยกต่อด้วยจุลภาคกุญแจและค่าสามารถเป็นชนิดข้อมูลใดก็ได้รวมถึงตัวอักษร ตัวเลข และชื่อแปร


local playerNames = {
player1 = "Zap",
player2 = "Kel",
}
print(playerNames["player1"])

เพื่ออ้างอิงชิ้นส่วนหรือวัตถุอื่นๆ เป็นกุญแจใช้เครื่องหมายเลขเล็กและเครื่องหมายลูกศร


local greenPart = workspace.GreenPart
local redPart = workspace.RedPart
local partList = {
[greenPart] = true,
[redPart] = false,
}
print(partList[redPart])

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

การใช้งานประจำวันของสารานุกรมคือการจัดระเบียบข้อมูลผู้เล่นหรือตัวละครขั้นตอนเหล่านี้สำรวจวิธีที่ข้อมูลตัวละครศัตรูทฤษฎีสามารถจัดเก็บและเข้าถึงได้

  1. ในสคริปต์ใหม่ สร้างสารานุกรมที่ชื่อว่า enemy .


    local enemy = {
    }
  2. คีย์แรกในสารานุกรมจะติดตามชื่อของศัตรูด้วยตัวแปรที่เรียกว่า Name


    local enemy = {
    Name
    }
  3. กำหนดชื่อศัตรูให้กับกุญแจตามด้วยจุลภาค


    local enemy = {
    Name = "Spike",
    }
  4. เพิ่มคู่คีย์-ค่าที่สองสำหรับจํานวนสุขภาพที่ศัตรูควรมี โปรดจําไว้ว่าคีย์ควรใช้ประเภทข้อมูลเดียวกันเสมอ แต่มูลค่าไม่จําเป็นต้อง


    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 มากขึ้น

เปลี่ยนค่าของสารานุกรม

การเปลี่ยนค่าของกุญแจเป็นเช่นเดียวกับตัวแปรอื่น ๆ ใช้ตัวประกอบเท่ากัน =

  1. ใต้ตาราง enemy ตั้งชื่อของศัตรูเป็นอย่างอื่น


    local enemy = {
    Name = "Spike",
    Health = 1000,
    }
    enemy.Name = "Rana"
    print("The enemy's name is " .. enemy.Name)
  2. ทดสอบและตรวจสอบหน้าต่างเอาต์พุต

ตัวแปรที่มีอยู่แล้วเป็นกุญแจ

สารานุกรมสามารถโต้ตอบกับตัวแปรที่มีอยู่แล้วในส่วนอื่นๆ ของสคริปต์ได้ตัวอย่างการเขียนโค้ดต่อไปนี้ใช้ตัวแปรเพื่อเพิ่มชื่อผู้เล่นเป็นกุญแจเมื่อพวกเขาเข้าร่วมประสบการณ์แล้วจึงตั้งค่ามูลค่าจุดของพวกเขาเป็น 0

  1. ใน ServerScriptService สร้างสคริปต์ใหม่ที่มีชื่อ PlayerPointsในสคริปต์ รับบริการผู้เล่นและสร้างสารานุกรมว่างเปล่าชื่อ playerPoints


    local Players = game:GetService("Players")
    local playerPoints = {
    }
  2. เขียนฟังก์ชันท้องถิ่นเพื่อตั้งค่าจุดผู้เล่นด้วยพารามิเตอร์สําหรับตัวแปรผู้เล่นใหม่ เชื่อมฟังก์ชันกับอีเวนต์ Players.PlayerAdded


    local playerPoints = {
    }
    local function setPoints(newPlayer)
    end
    Players.PlayerAdded:Connect(setPoints)
  3. ในฟังก์ชัน เพิ่มตัวแปรเพื่อรับ Name ของผู้เล่น คุณสมบัติในทุกวัตถุ ผู้เล่น และคำสั่งพิมพ์สำหรับการทดสอบ


    local function setPoints(newPlayer)
    local name = newPlayer.Name
    print("hello " .. name)
    end
  4. ใส่ name ลงในสารานุกรม playerPoints เป็นคีย์และตั้งค่ามูลค่า, แต้มของผู้เล่นเป็น 0


    local function setPoints(newPlayer)
    local name = newPlayer.Name
    print("hello " .. name)
    playerPoints[name] = 0
    end
  5. ใช้ name เพื่อพิมพ์ชื่อของผู้เล่นและ playerPoints[name] เพื่อพิมพ์ค่าของกุญแจที่ตรงกับตัวแปร


    local function setPoints(newPlayer)
    local name = newPlayer.Name
    print("hello " .. name)
    playerPoints[name] = 0
    print(name .. " has " .. playerPoints[name] .. " points.")
    end
  6. ดำเนินโครงการและสังเกตผลผลิต

สคริปต์เสร็จสิ้น

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) do
print(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) do
print(itemValue, itemName)
end

เมื่อดำเนินการแล้วรหัสจะพิมพ์สิ่งต่อไปนี้:


You have:
43 Gold Bricks
3 Carrots
2 Torches

บทสรุป

สารานุกรมเป็นตารางที่ใช้คู่คีย์-ค่าแทนค่าที่จัดเรียงแล้วสารานุกรมและอาร์เรย์เริ่มต้นคล้ายกันโดยการกำหนดเครื่องหมายเล็บคลาสให้กับตัวแปรให้รายการแยกออกจากกันด้วยจุลภาคที่แยก

คีย์ทั้งหมดภายในสารานุกรมควรใช้ประเภทข้อมูลเดียวกัน แต่ค่าสามารถผสมประเภทข้อมูลได้โดยไม่มีปัญหา

วิธีที่สามารถเข้าถึงสารานุกรมได้สามารถสื่อถึงวัตถุประสงค์ได้สารานุกรมของคุณสมบัติของศัตรูอาจจะถูกเข้าถึงด้วยตัวเลข dot ในขณะที่รายการชื่ออาจใช้ tableName[keyName]

เมื่อใช้เครื่องหมายการอ้างอิง โปรดระวัง; ชื่อกุญแจที่สร้างขึ้นภายในตารางต้องได้รับการปฏิบัติเป็นสตริง: tableName["keyName"]อย่างไรก็ตาม เมื่ออ้างถึงวัตถุเช่นชิ้นส่วน จะไม่จำเป็นต้องใช้การอ้างอิง: tableName[keyName]

สคริปต์จํานวนมากต้องผ่านสารานุกรมหรืออาร์เรย์ แต่คุณอาจไม่รู้เสมอเกี่ยวกับจุดเริ่มต้นและจุดสิ้นสุดของโครงสร้างข้อมูลเหล่านี้ตัวอย่างเช่น สารานุกรมของผู้เล่นอาจมีการเปลี่ยนแปลง หรือผู้เล่นอาจมีคลังสินค้าที่มีขนาดแตกต่างกัน

ในสถานการณ์เหล่านี้ คุณสามารถใช้ pairs() และ ipairs() ในลูป for เพื่อผ่านแต่ละองค์ประกอบโดยไม่มีจุดเริ่มต้นและจุดสิ้นสุดที่รู้จักคุณยังสามารถใช้การหมุนรอบทั่วไปผ่านคีย์วาร์ด in เพื่อหมุนผ่านองค์ประกอบโดยไม่จำเป็นต้องใช้ pairs() หรือ ipairs()