Kolejki

*Ta zawartość została przetłumaczona przy użyciu narzędzi AI (w wersji beta) i może zawierać błędy. Aby wyświetlić tę stronę w języku angielskim, kliknij tutaj.

Kolejka to liniowy zapis danych z zbiórką elementów. Istnieje dwa rodzaje kolejek na Roblox: zwykłe kolejki, które podążają za pierwszym zasadą pierwsze-pierwsze-wyjdź (FIFO), i kolejki priorytetowe, które mają priorytety dla elementów w kolejce, które określają kolejność dostępu do danych

Kolejka to wbudowana struktura danych non-persistent data storage usługa nazyjąca się MemoryStoreService, dla której możesz bezpośrednio wezwieć zbudowane funkcje, aby uzyskać kolejkę i dodawać, przeczytanelub usunąć dane z kolejki. Dla dowolnego innego użytku, takiego jak zaplanowanie zadań i zarządzanie wnioskami w

Zwykłe Kolejki

Zwykłe kolejki są utrzymywane w kolejności FIFO, w której wszystkie pozycje są dodawane do tyłu kolejki i czytane lub usuwane w tej samej kolejności, jak są dodawane, od przodu do kończyć.

Kolejność dodawania, czytania i usuwania pozycji w regularnej kolejce

Kolejki priorytetowe

Kolejki priorytetowe nie podążają za zasadą FIFO, w której każdy pozyciony może być dodany przy użyciu priorytetu, który określa jego kolejność czytania lub usuwania. Przedmiot w tle kolejki priorytetowej ma domyślną priorytet 0, a przedmiot w przodku kolejki priorytetowej ma najwyższą ustawioną priorytet, która jest 5 w następnym przykładzie.

Zmiana priorytetu przedmiotu zmienia kolejność czytania przedmiotu z listy przez kody w kolejności

Dla tego przykładu, pozycja z ustawioną priorytetem 3 jest dodawana do kolejki. Kolejka umieszcza nową pozycję za wszystkimi istniejącymi pozycjami z ustawioną priorytetem 3 lub więcej. Aby umieścić pozycję na czele kolejki, musisz ustawić priorytet wyższy niż aktualny najwyższy ustawiony priorytet. W tym przykładzie musisz ustawić priorytet na

Kolejki priorytetowe są przydatne w sytuacjach, w których chcesz przeczytać lub uzyskać dostęp do danych w oparciu o kolejność znaczenia zamiast kolejności dodawania. Możesz ustawić priorytet jako liczbę, gdy dodajesz pozycję, a procesy kolejki przetwarzają pozycje z wyższym priorytetem przed pozycjami z niższymi priorytetami. Na przykład możesz użyć priory

Wprowadzanie kolejek

Możesz użyć wbudowanych kolejek MemoryStoreService lub użyć tabel do implementacji kolejek dla wszystkich innych użyć. Poniższy kod przykładu pokazuje implementację normalnej kolejki. Aby użyć tego wdrożenia dla swojego doświadczenia, powinieneś

Wdrożenie zwykłej kolejki używając tabeli

--!surowy
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
-- Sprawdź, czy kolejka jest pusta
function Queue.IsEmpty<T>(self: Queue<T>)
return self._first > self._last
end
-- Dodaj wartość do kolejki
function Queue.Enqueue<T>(self: Queue<T>, value: T)
local last = self._last + 1
self._last = last
self._queue[last] = value
end
-- Usuń wartość z kolejki
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

Poniższy kod przykładowy jest przykładem użycia jako Script pod Workspace . Możesz modyfikować kod, wpisywać i lokalizować przechowywanie, aby dostosować go do własnego użytku, o ile masz poprawnie zapisany poprzedni przykład implementacji.

Przykład użytkowania zwykłej kolejki

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Queue = require(ReplicatedStorage:WaitForChild("Queue"))
local myQueue = Queue.new()
-- Dodaj kilka wartości do kolejki
myQueue:Enqueue(5)
myQueue:Enqueue(10)
myQueue:Enqueue(15)
-- moja kolejka = { 5, 10, 15 }
-- Usuń jedną wartość z kolejki
local first = myQueue:Dequeue()
print("The first value added to the queue was", first)
-- moja kolejka = { 10, 15}
-- Dodaj więcej wartości do kolejki
myQueue:Enqueue(20)
myQueue:Enqueue(25)
myQueue:Enqueue(30)
-- moja kolejka = { 10, 15, 20, 25, 30}
-- Usuń kolejną wartość z listy
local second = myQueue:Dequeue()
print("The second value added to the queue was", second)
-- myQueue = { 15, 20, 25, 30 }