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

เพิ่มค่าในอาร์เรย์
เพื่อเพิ่มค่ามูลค่าใหม่ในอาร์เรย์ ให้ใช้ table.insert(array, valueToInsert) พารามิเตอร์ที่สองสามารถเป็นค่าต่างๆ เช่น สตริง ตัวเลข หรือวัตถุทั้งหมด เช่น Player หรือ IntValue
เพื่อฝึกฝน คุณจะสร้างสคริปต์ที่จัดเก็บรายการของผู้เล่นในตาราง จากนั้นเพิ่มเข้าไป เนื่องจากตัวอย่างนี้เป็นเพียงสคริปต์ จึงสามารถใช้กับไฟล์หรือโปรเจ็กต์ใดก็ได้ การทดสอบโค้ดจะทำโดยใช้หน้าต่าง Output
สร้างอาร์เรย์ที่ว่างเปล่าชื่อ playerItems
playerItems = {}เพิ่มรายการสินค้าคงคลังในอาร์เรย์โดยพิมพ์ table.insert() ในวงเล็บ ให้พิมพ์ playerItems ตารางที่จะเพิ่มเข้าไป ตามด้วยสตริงสำหรับแต่ละรายการ เพิ่มค่าที่อย่างน้อยสามค่า
playerItems = {}table.insert(playerItems, "Potion")table.insert(playerItems, "Bread")table.insert(playerItems, "Sleeping Bag")print(playerItems)รันโปรเจ็กต์ ใน Output ให้ขยายสามจุด ... เพื่อดูตารางที่พิมพ์
ลบค่าออกจากอาร์เรย์
เพื่อทำการลบค่า เช่น ถ้าผู้เล่นใช้รายการหรือมีใครบางคนในรายการผู้เล่นที่ใช้งานได้ออกจากประสบการณ์ ให้ใช้ table.remove() ขึ้นอยู่กับพารามิเตอร์ที่ให้ ฟังก์ชันนี้สามารถลบค่าล่าสุดในตาราง หรือที่ตำแหน่งเฉพาะ
ลบค่าล่าสุด
บางครั้งสคริปต์ต้องการลบรายการเฉพาะ สำหรับตัวอย่างการลบรายการแรกในสินค้าคงคลังของผู้เล่น หรือการเลือกผู้เล่นแรกในรายการ เพื่อลบค่าล่าสุดในอาร์เรย์ ให้ใช้ table.remove(arrayName) ในกรณีนี้พารามิเตอร์ที่ต้องการเพียงแค่ตารางเอง
ใช้อาร์เรย์ของรายการจากตัวอย่างก่อนหน้านี้ จากนั้นเพื่อทำการลบค่าล่าสุดจากตาราง ในกรณีนี้คือ "Sleeping Bag" ให้พิมพ์ table.remove(playerItems)
playerItems = {}table.insert(playerItems, "Potion")table.insert(playerItems, "Bread")table.insert(playerItems, "Sleeping bag")table.remove(playerItems)print(playerItems)รันโปรเจ็กต์ ในหน้าต่าง Output ค่าล่าสุด "Sleeping Bag" จะไม่ถูกพิมพ์
ลบตามดัชนี
เพื่อทำการลบค่า ณ จุดเฉพาะในอาร์เรย์ ให้ป้อนในพารามิเตอร์ที่สอง ดัชนีที่ต้องการลบ เช่น table.remove(arrayName, 1)
ใช้ตารางเดียวกัน พิมพ์ table.remove() ในพารามิเตอร์ให้บันทึกชื่อตารางและ 1 ค่าที่ต้องการลบ
playerItems = {}table.insert(playerItems, "Potion")table.insert(playerItems, "Bread")table.insert(playerItems, "Sleeping bag")table.remove(playerItems, 1)รันโปรเจ็กต์ ตรวจสอบว่าค่าที่หนึ่ง "Potion" ถูกลบหรือไม่
ค้นหาค่าในอาร์เรย์
เพื่อค้นหาค่าที่เฉพาะในอาร์เรย์ เช่น ชื่อของผู้เล่นที่ชนะ ใช้ฟังก์ชัน table.find() หรือคุณสามารถเขียนฟังก์ชันค้นหาของคุณเองโดยใช้ for ลูปและ if คำสั่ง
ค้นหาและคืนค่าหนึ่งค่า
เพื่อค้นหาค่าในอาร์เรย์ สร้างฟังก์ชันชื่อ findValue() ที่ทำการตรวจสอบผ่านอาร์เรย์และหยุดเมื่อพบค่าที่ตรงกันเป็นครั้งแรก
เมื่อพบค่า ฟังก์ชันจะใช้คำสำคัญ return เพื่อคืนดัชนีของค่านั้น ด้วยดัชนี คุณสามารถลบออกจากอาร์เรย์ได้
คัดลอกอาร์เรย์ที่ชื่อ playerItems ด้านล่าง
local playerItems = {"Potion","Bread","Bread","Sleeping Bag"}เขียนฟังก์ชันใหม่ชื่อ findValue() ที่มีพารามิเตอร์สองตัว:
whichArray - อาร์เรย์ที่ใช้ค้นหา
itemName - สตริงเฉพาะที่จะตรวจสอบ
local function findValue(whichArray, itemName)end
ใน findValue() ใช้ลูป for เพื่อตรวจสอบว่าค่าที่อยู่ในอาร์เรย์ตรงกับ itemName หรือไม่ ถ้าค่าตรงกัน ใช้คำสำคัญ return เพื่อส่งกลับค่าที่พบใน currentIndex
local function findValue(whichArray, itemName)for currentIndex = 1, #whichArray doif whichArray[currentIndex] == itemName thenreturn currentIndexendendendทดสอบฟังก์ชันค้นหาโดยสร้างตัวแปรชื่อ valueFound และเรียกใช้ findValue() ส่งอาร์เรย์ที่ต้องการค้นหาและค่าที่ควรคัดกรอง รัน โค้ดเพื่อยืนยันว่าผลลัพธ์ที่คาดหวังคือดัชนี 2
local function findValue(whichArray, itemName)for currentIndex = 1, #whichArray doif whichArray[currentIndex] == itemName then--ส่งค่าของ currentIndex กลับreturn currentIndexendendendlocal valueFound = findValue(playerItems, "Bread")print("ค่าคือที่ดัชนี " .. valueFound)
ลบค่า
หากค่าถูกพบโดยการใช้ฟังก์ชันค้นหา มันสามารถถูกลบได้ ตรวจสอบว่าค่าถูกพบด้วยคำสั่ง if
ตรวจสอบว่าค่ามีอยู่ใน valueFound หรือไม่; ถ้าใช่ ให้ลบค่าโดยใช้ table.remove()
if valueFound thentable.remove(playerItems, valueFound)endพิมพ์อาร์เรย์โดยใช้โค้ดด้านล่าง
for index = 1, #playerItems dolocal itemString = playerItems[index]print("ดัชนี " .. index .. ": " .. itemString)endทดลองเล่นและตรวจสอบว่าค่า "Bread" ค่าแรกถูกลบออกจากอาร์เรย์ ความพยายามในการลบค่าตัวอื่นโดยการเปลี่ยนพารามิเตอร์ที่สองใน findValue()
สังเกตว่าเนื่องจากฟังก์ชันนี้ถูกเรียกเพียงครั้งเดียว แค่ค่าก่อนหน้าของ "Bread" เท่านั้นที่จะถูกลบออก ส่วนถัดไปจะพูดถึงวิธีการค้นหาและลบทุกกรณี
ค้นหาและลบทุกค่าที่เฉพาะเจาะจง
ในขณะที่โค้ดก่อนหน้านี้สามารถลบได้เฉพาะการปรากฏครั้งแรกของค่าที่พบ โค้ดสั้นนี้จะค้นหาและลบทุกการเกิดขึ้นจากอาร์เรย์ ตัวอย่างเช่น หากผู้เล่นต้องการขายขนมปังทั้งหมดที่ร้านค้าในเกม
ใช้อาร์เรย์ชื่อ playerItems ที่มีอย่างน้อยสี่ค่าพร้อมชุดของ ค่าที่ซ้ำกัน
local playerItems = {"Potion","Bread","Bread","Sleeping Bag"}เพื่อผ่านอาร์เรย์ ให้สร้างลูป for ที่ทำงาน ย้อนกลับ ผ่าน playerItems โดยเริ่มที่ #playerItems จบที่ 1 และเพิ่มขึ้นด้วย -1
for index = #playerItems, 1, -1 doendในลูป ใช้คำสั่ง if เพื่อตรวจสอบว่าค่าภายใน playerItems[index] เท่ากับ "Bread" และถ้าใช่ให้ลบรายการนั้น
for index = #playerItems, 1, -1 doif playerItems[index] == "Bread" thentable.remove(playerItems, index)endendใช้โค้ดด้านล่างเพื่อเพิ่มลูป for ที่สองเพื่อพิมพ์อาร์เรย์
for index = 1, #playerItems dolocal itemString = playerItems[index]print("ดัชนี " .. index .. ": " .. itemString)endรันสคริปต์และตรวจสอบว่าค่าทั้งหมดที่ชื่อ "Bread" ถูกลบออก
สรุป
ค่าสามารถลบหรือลงทุนในอาร์เรย์ แต่ต้องระวังดัชนีที่เลื่อนตามเมื่อทำเช่นนั้น ใช้ลูปเพื่อวนผ่านตารางเพื่อเพื่อลบทุกกรณีของค่า หรือแค่กรณีแรกที่พบ
คำสำคัญ return สามารถใช้เพื่อหยุดลูปและส่งข้อมูลกลับที่จำเป็น
สามารถอ้างอิงได้ถึงเวอร์ชันเสร็จสมบูรณ์ของสคริปต์ด้านล่าง
โปรเจ็กต์ต่อไปนี้รวมทุกสคริปต์ในบทแนะนำนี้ ดาวน์โหลด ที่นี่
โปรดทราบว่าสคริปต์ทั้งหมดอยู่ใน ServerScriptService และ ถูกปิดการใช้งาน เพื่อใช้สคริปต์ ในคุณสมบัติของมัน ให้ยกเลิกการเลือกพื้นที่ Disabled และรัน Studio