คิว

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

คิวเป็นโครงสร้างข้อมูลเชิงเส้นที่มีคอลเลกชันของรายการมีสองประเภทของคิวบน 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 }