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

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

สำหรับตัวอย่างนี้ไอเทมที่มีลําดับความสําคัญที่กําหนดไว้ 3 จะถูกเพิ่มลงในคิวคิววางไอเทมใหม่ไว้ข้างหลังไอเทมทั้งหมดที่มีลําดับความสําคัญที่กําหนดไว้แล้ว 3 หรือมากกว่าเพื่อวางรายการไว้ที่ด้านหน้าของคิว คุณต้องตั้งค่าลําดับความสําคัญสูงกว่าค่าลําดับความสําคัญสูงสุดปัจจุบันในตัวอย่างนี้คุณต้องตั้งความสำคัญเป็น 6 หรือสูงกว่า
คิวลําดับความสําคัญมีประโยชน์สําหรับสถานการณ์ที่คุณต้องการอ่านหรือเข้าถึงข้อมูลตามลําดับความสําคัญแทนการสั่งเพิ่มขึ้นคุณสามารถกำหนดลําดับความสําคัญเป็นจํานวนเต็มเมื่อเพิ่มรายการและกระบวนการคิวจะดําเนินรายการที่มีลําดับความสําคัญสูงกว่าก่อนรายการที่มีลําดับความสําคัญต่ํากว่าตัวอย่างเช่น คุณสามารถใช้คิวลําดับความสําคัญสําหรับการจับคู่โดยการกำหนดความสําคัญสูงสุดให้กับผู้ใช้ที่รอมาเป็นเวลานาน
ดำเนินการตามคิว
คุณสามารถใช้คิวที่มีอยู่ของ MemoryStoreService หรือใช้ ตาราง เพื่อใช้คิวสำหรับการใช้งานอื่น ๆ ทั้งหมดตัวอย่างโค้ดต่อไปนี้แสดงการใช้งานคิวปกติ **** เพื่อใช้การดําเนินการนี้สําหรับประสบการณ์ของคุณคุณควรบันทึกเป็น ModuleScript และเก็บไว้ใน ReplicatedStorage ดังนั้นคิวของคุณจะสามารถเข้าถึงได้ทั้งสําหรับไคลเอนต์และเซิร์ฟเวอร์
การดำเนินการตามคิวปกติโดยใช้ตาราง
--!เคร่งครัด
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("Cannot dequeue from empty queue")
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คุณสามารถแก้ไขโค้ด ประเภท และตำแหน่งที่เก็บข้อมูลให้เหมาะกับการใช้งานของคุณได้ตราบเท่าที่คุณมีตัวอย่างโค้ดการใช้งานก่อนหน้านี้ถูกเก็บไว้อย่างถูกต้อง
ตัวอย่างการใช้คิวปกติ
local ReplicatedStorage = game:GetService("ReplicatedStorage")local Queue = require(ReplicatedStorage:WaitForChild("Queue"))local myQueue = Queue.new()-- เพิ่มค่าบางอย่างในคิวmyQueue:enqueue(5)myQueue:enqueue(10)myQueue:enqueue(15)-- คิวของฉัน = { 5, 10, 15 }-- ลบค่าหนึ่งจากคิวlocal first = myQueue:dequeue()print("The first value added to the queue was", first)-- คิวของฉัน = {10, 15}-- เพิ่มมูลค่าเพิ่มเติมให้กับคิวmyQueue:enqueue(20)myQueue:enqueue(25)myQueue:enqueue(30)-- คิวของฉัน = { 10, 15, 20, 25, 30 }-- ลบมูลค่าอื่นออกจากคิวlocal second = myQueue:dequeue()print("The second value added to the queue was", second)-- myQueue = { 15, 20, 25, 30 }