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ć.
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.
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 kolejkimyQueue:Enqueue(5)myQueue:Enqueue(10)myQueue:Enqueue(15)-- moja kolejka = { 5, 10, 15 }-- Usuń jedną wartość z kolejkilocal first = myQueue:Dequeue()print("The first value added to the queue was", first)-- moja kolejka = { 10, 15}-- Dodaj więcej wartości do kolejkimyQueue:Enqueue(20)myQueue:Enqueue(25)myQueue:Enqueue(30)-- moja kolejka = { 10, 15, 20, 25, 30}-- Usuń kolejną wartość z listylocal second = myQueue:Dequeue()print("The second value added to the queue was", second)-- myQueue = { 15, 20, 25, 30 }