큐는 아이템의 컬렉션이 있는 선형 데이터 구조입니다.Roblox에는 두 가지 종류의 큐가 있습니다: 일반 큐, 첫 번째 순서대로 따르는 FIFO(First-In-First-Out) 원칙, 그리고 우선 순위 큐, 큐에 있는 항목에 대한 우선 순위가 데이터 액세스 순서를 결정하는 원칙.두 종류의 큐에 있는 항목은 Luau 데이터 유형 이 될 수 있습니다.
큐는 영구적이지 않은 데이터 저장소 서비스인 MemoryStoreService의 기본 데이터 구조로, 큐를 직접 호출하여 큐를 가져오고, 읽음제거하고, 큐에 데이터를 추가할 수 있습니다.스케줄링 작업 및 경험에서 요청 처리와 같은 다른 용도에는 테이블을 사용하여 큐를 보유구현할 수 있습니다.
일반 대기열
일반 큐는 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
다음 코드 샘플은 아래의 아래에서 사용 예시입니다.이전 구현 코드 샘플을 적절하게 저장하는 한, 코드, 입력및 저장소 위치를 사용자 요구에 맞게 수정할 수 있습니다.
일반 큐 사용 예시
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("The first value added to the queue was", first)-- myQueue = {10, 15}-- 큐에 더 많은 값 추가myQueue:enqueue(20)myQueue:enqueue(25)myQueue:enqueue(30)-- myQueue = {10, 15, 20, 25, 30}-- 큐에서 다른 값 제거local second = myQueue:dequeue()print("The second value added to the queue was", second)-- myQueue = { 15, 20, 25, 30 }