Hàng đợi

*Nội dung này được dịch bằng AI (Beta) và có thể có lỗi. Để xem trang này bằng tiếng Anh, hãy nhấp vào đây.

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 dẫn cách thức một hàng đợi thường thêm, đọc và xóa mụ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 đ

Một thay đổi trong trọng tâm của một vật phẩmsẽ thay đổi thứ tự mà hàng đợi đọc các mục

Đố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 đợi
myQueue:Enqueue(5)
myQueue:Enqueue(10)
myQueue:Enqueue(15)
-- myQueue = {5, 10, 15}
-- Loại bỏ một giá trị khỏi hàng đợi
local 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 đợi
myQueue: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 đợi
local second = myQueue:Dequeue()
print("The second value added to the queue was", second)
-- myQueue = { 15, 20, 25, 30 }