เนื้อหาของอาร์เรย์มักจะต้องมีการเปลี่ยนแปลง เช่น เมื่อจำเป็นต้องลบรายการจากคลังของผู้เล่น 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