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

เพิ่มค่าให้กับ阵列
เพื่อเพิ่มค่าใหม่ให้กับ阵列ใช้ table.insert(array, valueToInsert) .พารามิเตอร์ที่สองสามารถเป็นค่าใดก็ได้เช่นสตริง ตัวเลข หรือวัตถุทั้งหมด เช่น Player หรือ IntValue
เพื่อฝึกซ้อมคุณจะสร้างสคริปต์ที่เก็บไอเทมผู้เล่นในตารางแล้วเพิ่มลงในมันเนื่องจากตัวอย่างนี้เป็นเพียงสคริปต์ จึงสามารถใช้กับไฟล์หรือโครงการใดก็ได้การทดสอบโค้ดจะทำโดยใช้หน้าต่างออก
สร้าง阵列ว่างชื่อ playerItems ที่ว่างเปล่า
playerItems = {}เพิ่มรายการสินค้าคงคลังในรายการโดยพิมพ์ table.insert() .ในเครื่องหมายวรรคที่สอง, พิมพ์ playerItems , ไอเท็ม
playerItems = {}table.insert(playerItems, "Potion")table.insert(playerItems, "Bread")table.insert(playerItems, "Sleeping Bag")print(playerItems)ดำเนินโครงการ ในออกผล ขยายจุดสามจุด ... เพื่อดูตารางพิมพ์
ลบค่าออกจาก阵列
เพื่อลบค่า เช่นถ้าผู้เล่นใช้ไอเทมหรือบุคคลในรายการผู้เล่นที่ใช้งานอยู่ออกจากประสบการณ์ใช้ 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)ดำเนินโครงการ ในหน้าต่างเอาต์พุต ค่าสุดท้าย "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)ดำเนินโครงการ ตรวจสอบว่ามูลค่าแรก "ยา" ถูกลบออก
ค้นหาค่าในอาร์เรย์
เพื่อค้นหาค่าเฉพาะในอาร์เรย์ เช่น ชื่อผู้เล่นที่ชนะ ให้ใช้ฟังก์ชัน 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("The value is at index " .. valueFound)
ลบค่า
หากค่าถูกพบโดยใช้ฟังก์ชันค้นหา ค่านั้นสามารถลบได้ ตรวจสอบว่าค่าถูกพบด้วยคำสั่ง if หรือไม่
ตรวจสอบว่ามีค่าอยู่ภายใน valueFound หรือไม่ หากมีให้ลบค่าโดยใช้ table.remove()
if valueFound thentable.remove(playerItems, valueFound)endพิมพ์อาร์เรย์โดยใช้รหัสด้านล่าง
for index = 1, #playerItems dolocal itemString = playerItems[index]print("Index " .. index .. ": " .. itemString)endทดสอบและตรวจสอบว่าค่าแรก "Bread" ถูกลบออกจาก阵列ลองลบมูลค่าอื่นโดยเปลี่ยนพารามิเตอร์ที่สองใน findValue()
สังเกตว่าเนื่องจากฟังก์ชันนี้ถูกเรียกเพียงครั้งเดียวเท่านั้น ตัวอย่างแรกของ "Bread" ถูกลบออกส่วนต่อไปจะครอบคลุมวิธีการค้นหาและลบทุกตัวอย่าง
ค้นหาและลบทั้งหมดของค่าที่เฉพาะเจาะจง
ในขณะที่โค้ดก่อนหน้านี้สามารถลบตัวอย่างแรกของค่าที่พบได้เท่านั้น ส่วนตัดต่อนี้จะค้นหาและลบการเกิดทั้งหมดจากคอลเลกชันตัวอย่างเช่น ถ้าผู้เล่นต้องการขายขนมปังทั้งหมดในร้านค้าในเกม ก็จะ
ใช้阵列ชื่อ playerItems ที่มีอย่างน้อยสี่ค่าและชุดของ ซ้ำ
local playerItems = {"Potion","Bread","Bread","Sleeping Bag"}เพื่อผ่านทางรายการ สร้างลูป for ที่ไป ย้อนกลับ ผ่าน playerItems เริ่มต้นที่ #playerItems และเพิ่มขึ้นโดย -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 index = 1, #playerItems dolocal itemString = playerItems[index]print("Index " .. index .. ": " .. itemString)endดำเนินการตามสคริปต์และตรวจสอบว่ามีการลบค่าทั้งหมดที่ชื่อว่า "ขนมปัง"
สรุป
ค่าสามารถลบหรือเพิ่มลงในคอลเลกชัน แต่ต้องระวังดัชนีที่เลื่อนทำเช่นนั้นใช้ลูปเพื่อจัดเล่นผ่านตารางเพื่อลบตัวอย่างทั้งหมดของค่าหรือเพียงตัวอย่างแรกที่พบ
คีย์เวิร์ด return สามารถใช้เพื่อหยุดลูปและส่งข้อมูลกลับไปที่จำเป็น
สามารถอ้างอิงเวอร์ชันสิ้นสุดของสคริปต์ได้ด้านล่าง
โครงการต่อไปนี้รวมถึงสคริปทั้งหมดในบทแนะนำนี้ ดาวน์โหลด ที่นี่ .
โปรดทราบว่าสคริปทั้งหมดอยู่ใน ServerScriptService และ ถูกปิดใช้งาน เพื่อใช้สคริปต์ในคุณสมบัติของมัน เลือกไม่ใช้ฟิลด์ที่ถูกปิดใช้งานและเรียกใช้ Studio