คิว

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

คิวเป็นโครงสร้างข้อมูลเชิงเส้นที่มีการรวบรวมของรายการ มีคิวสองประเภทบน Roblox: คิวปกติ ซึ่งปฏิบัติตามหลักการแรกเข้าก่อนออก (FIFO) และ คิวลำดับความสำคัญ ซึ่งมีลำดับความสำคัญสำหรับรายการในคิวที่กำหนดลำดับการเข้าถึงข้อมูล รายการในทั้งสองประเภทของคิวสามารถเป็นประเภทข้อมูล Luau ใด ๆ.

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

คิวปกติ

คิวปกติจะถูกดูแลในลำดับ FIFO ซึ่งรายการทั้งหมดจะถูกเพิ่มไปที่ด้านหลังของคิวและอ่านหรือถูกลบออกตามลำดับเดียวกันที่ถูกเพิ่มเข้ามาจากด้านหน้าไปยังด้านหลัง

ลำดับของการที่คิวปกติเพิ่ม อ่าน และลบรายการ

คิวลำดับความสำคัญ

คิวลำดับความสำคัญไม่ปฏิบัติตามกฎ FIFO ซึ่งแต่ละรายการสามารถถูกเพิ่มด้วยหมายเลขลำดับความสำคัญที่บ่งบอกถึงลำดับในการอ่านหรือถูกลบ รายการที่อยู่ด้านหลังของคิวลำดับความสำคัญมีลำดับความสำคัญเริ่มต้นที่ 0 และรายการที่อยู่ด้านหน้าของคิวมีลำดับความสำคัญที่ตั้งไว้สูงสุดซึ่งคือ 5 ในตัวอย่างต่อไปนี้

ลำดับความสำคัญที่ตั้งไว้ของรายการจะเปลี่ยนลำดับที่คิวอ่านรายการ

ในตัวอย่างนี้ รายการที่มีลำดับความสำคัญที่ตั้งไว้ที่ 3 กำลังถูกเพิ่มไปยังคิว คิวจะวางรายการใหม่ไว้เบื้องหลังรายการที่มีอยู่ทั้งหมดที่มีลำดับความสำคัญที่ตั้งไว้ที่ 3 หรือมากกว่า เพื่อวางรายการที่ด้านหน้าของคิว คุณต้องตั้งค่าลำดับความสำคัญให้สูงกว่าลำดับความสำคัญสูงสุดที่ตั้งไว้ในปัจจุบัน ในตัวอย่างนี้ คุณต้องตั้งค่าลำดับความสำคัญเป็น 6 หรือสูงกว่า

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

การนำเข้าคิว

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

Implementing a Regular Queue Using Table

--!strict
local Queue = {}
Queue.__index = Queue
export type Queue<T> = typeof(setmetatable(
{} :: {
_first: number,
_last: number,
_queue: { T },
},
Queue
))
function Queue.new<T>(): Queue<T>
local self = setmetatable({
_first = 0,
_last = -1,
_queue = {},
}, Queue)
return self
end
-- ตรวจสอบว่าคิวว่างหรือไม่
function Queue.isEmpty<T>(self: Queue<T>)
return self._first > self._last
end
-- เพิ่มค่าลงในคิว
function Queue.enqueue<T>(self: Queue<T>, value: T)
local last = self._last + 1
self._last = last
self._queue[last] = value
end
-- ลบค่าจากคิว
function Queue.dequeue<T>(self: Queue<T>): T
if self:isEmpty() then
error("ไม่สามารถลบจากคิวที่ว่าง")
end
local first = self._first
local value = self._queue[first]
self._queue[first] = nil
self._first = first + 1
return value
end
return Queue

โค้ดตัวอย่างด้านล่างนี้เป็นตัวอย่างการใช้งานใน Script ภายใต้ Workspace คุณสามารถปรับเปลี่ยนโค้ด ประเภท และตำแหน่งจัดเก็บเพื่อให้เหมาะกับการใช้งานของคุณ โดยที่คุณมีโค้ดการนำเข้าในตัวอย่างก่อนหน้านี้ที่เก็บไว้อย่างถูกต้อง

Regular Queue Usage Example

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Queue = require(ReplicatedStorage:WaitForChild("Queue"))
local myQueue = Queue.new()
-- เพิ่มค่าลงในคิว
myQueue:enqueue(5)
myQueue:enqueue(10)
myQueue:enqueue(15)
-- myQueue = { 5, 10, 15 }
-- ลบค่าหนึ่งรายการจากคิว
local first = myQueue:dequeue()
print("ค่าตัวแรกที่เพิ่มลงในคิวคือ", first)
-- myQueue = { 10, 15 }
-- เพิ่มค่ามากขึ้นในคิว
myQueue:enqueue(20)
myQueue:enqueue(25)
myQueue:enqueue(30)
-- myQueue = { 10, 15, 20, 25, 30 }
-- ลบค่ารายการอีกหนึ่งรายการจากคิว
local second = myQueue:dequeue()
print("ค่ารายการที่สองที่เพิ่มลงในคิวคือ", second)
-- myQueue = { 15, 20, 25, 30 }
©2026 Roblox Corporation. Roblox, โลโก้ Roblox และ Powering Imagination เป็นส่วนหนึ่งของเครื่องหมายการค้าที่จดทะเบียน และไม่ได้จดทะเบียนของเราในสหรัฐฯ และประเทศอื่นๆ