*이 콘텐츠는 AI(베타)를 사용해 번역되었으며, 오류가 있을 수 있습니다. 이 페이지를 영어로 보려면 여기를 클릭하세요.

큐는 아이템의 컬렉션이 있는 선형 데이터 구조입니다.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 }