Một hàng đợi là một cấu trúc dữ liệu lineal với một bộ sưu tập các mục. Có hai loại hàng đợi trên Roblox: hàng đợi thông thường , theo nguyên tắc first-in-first-out (FIFO), và hàng đợi ưu ti
Hàng đợi là một cấu trúc dữ liệu tích hợp của non-persistent data storage dịch vụ, cho phép bạn gọi trực tiếp các hàm tích hợp để lấy hàng đợi và thêm, đã xemhoặc xóa dữ liệu từ hàng đợi. Đối với bất kỳ
Hàng đợi thường
Hàng đợi thường được duy trì trong trình tự FIFO, trong đó tất cả các mục được thêm vào phía sau của hàng đợi và đọc hoặc xóa theo cùng một thứ tự như khi chúng được thêm, từ phía trước đến phía kết thúc.
Hàng đợi ưu tiên
Hàng đợi ưu tiên không tuân theo quy tắc FIFO, trong đó mỗi món đồ có thể được thêm với một số ưu tiên để cho phép nó được đọc hoặc xóa. Món đồ ở phía sau của một hàng đợi có mức ưu tiên mặc định là 0, và món đồ ở phía trước của hàng đ
Đối với ví dụ này, một mục có một trọng tài ưu tiên 3 đang được thêm vào hàng đợi. Hàng đợi đặt mục mới này sau tất cả các mục đã có trong hàng đợi với trọng tài ưu tiên 3 hoặc cao hơn. Để đặt một mục ở phía trước
Hàng đợi ưu tiên hữu ích cho các tình huống mà bạn muốn đọc hoặc truy cập dữ liệu dựa trên thứ tự ưu tiên thay vì thứ tự được thêm vào. Bạn có thể thiết lập một hàng đợi là một số khi thêm một vật phẩm, và hàng đợi xử lý các
Thực hiện hàng đợi
Bạn có thể sử dụng các hàng đợi bên trong của MemoryStoreService hoặc sử dụng bảng tables để thực hiện các hàng đợi cho tất cả các mục đích sử dụng. Các ví dụ
Thực hiện một Hàng Đợi Thông Thường Bằng Cách Sử Dụng Bảng
--! nghiêm ngặt
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
-- Kiểm tra xem hàng đợi có trống không
function Queue.IsEmpty<T>(self: Queue<T>)
return self._first > self._last
end
-- Thêm giá trị vào hàng đợi
function Queue.Enqueue<T>(self: Queue<T>, value: T)
local last = self._last + 1
self._last = last
self._queue[last] = value
end
-- Loại bỏ một giá trị khỏi hàng đợi
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
Mẫu mã code sau đây là một ví dụ sử dụng như một Script dưới Workspace . Bạn có thể điều chỉnh mã, đánh máyvà vị trí lưu để phù hợp với sử dụng của riêng bạn, miễn là bạn có một mẫu mã thực hiện chính xác được lưu.
Ví dụ sử dụng hàng đợi thông thường
local ReplicatedStorage = game:GetService("ReplicatedStorage")local Queue = require(ReplicatedStorage:WaitForChild("Queue"))local myQueue = Queue.new()-- Thêm một số giá trị vào hàng đợimyQueue:Enqueue(5)myQueue:Enqueue(10)myQueue:Enqueue(15)-- myQueue = {5, 10, 15}-- Loại bỏ một giá trị khỏi hàng đợilocal first = myQueue:Dequeue()print("The first value added to the queue was", first)-- myQueue = { 10, 15}-- Thêm thêm giá trị vào hàng đợimyQueue:Enqueue(20)myQueue:Enqueue(25)myQueue:Enqueue(30)-- myQueue = {10, 15, 20, 25, 30}-- Loại bỏ một giá trị khác khỏi hàng đợilocal second = myQueue:Dequeue()print("The second value added to the queue was", second)-- myQueue = { 15, 20, 25, 30 }