대기열

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

대기열은 항목 컬렉션을 가진 직선적인 데이터 구조입니다. Roblox에는 두 가지 종류의 대기열이 있습니다: 일반 대기열, 즉 첫 번째 순위를 따르는 첫 번째 출력 순서를 따르며, 우선 대기열, 즉 순위를

대기열은 비동기 데이터 저장 서비스의 내장 데이터 구조로, 이 서비스에서 직접 대기열 함수를 호출하여 데이터를 추가하고 읽음제거합니다. 다른 용도, 예를 들어 작업 예약 및 처리 요청 처리에 대해, 테이블을 사용하여 대기열을

일반 대기열

일반적인 대기열은 FIFO 순서대로 유지 관리되며, 모든 항목이 대기열의 뒷부분에 추가되고 대기열에서 읽거나 제거되며 앞에서 종료동일한 순서로 읽거나 제거됩니다.

정규 큐의 항목 추가, 읽기 및 삭제 순서

우선 순위 큐

우선 큐는 FIFO 규칙을 따르지 않습니다, 여기서 각 항목은 우선 순위 번호를 가진 순서대로 읽거나 제거할 수 있습니다. 우선 큐의 뒷부분에 있는 항목은 기본 우선 순위가 0이며, 앞부분의 항목은 최대 우선 순위가 5입니다. 다음 예에서 볼 수 있듯이.

아이템의 우선 순위 변경은 큐가 아이템을 읽는 순서를 변경합니다.

이 예에서는 3개의 우선 순위가 있는 항목이 큐에 추가됩니다. 큐는 3개 이상의 우선 순위가 있는 모든 항목을 가진 새 항목을 큐의 뒤에 배치합니다. 큐의 머리에 아이템을 배치하려면 현재 최고 우선 순위보다 우선 순위를 높여야 합니다. 이 예

우선 순위 큐는 순서가 아닌 순서로 데이터를 읽거나 액세스하려는 경우에 유용합니다. 우선 순위 큐를 아이템추가할 때 정렬하는 순서가 아닌 순서로 데이터를 읽거나 액세스하려면 정수를 우선 순위로 설정할 수 있습니다. 예를 들어, 더 많은 시간

대기열 구현

Class.MemoryStoreService 의 내장 대기열을 사용하거나 모든 다른 사용을 위해 테이블을 사용하여 대기열을 구현할 수 있습니다. 다음 코드 샘플은 구현을 위해 정규 대기열 을 저장하고

테이블을 사용하여 정규 큐 구현

--!엄격
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 }