Eine Warteschlange ist eine linke Datenstruktur mit einer Sammlung von Elementen. Es gibt zwei Arten von Warteschlangen auf Roblox: reguläre Warteschlangen, die dem ersten-in-erst-aus-Prinzip folgen, und Prioritätswarteschlangen, die eine Reihe von Elementen in der Warteschlange haben, die den Datenzugriff ordnen. Elemente in beiden Arten von Warteschlangen können alle Luau
Die Warteschlange ist eine integrierte Datenstruktur des nicht persistenten Datenstoß-Dienstes mit dem Namen MemoryStoreService, für den du die integrierten Funktionen aufrufen kannst, um eine Warteschlange zu erstellen und Daten aus der Warteschlange zu gelesenoder zu entfernen. Für jeden anderen Gebrauch, z. B. das Senden von Aufgaben und das Verwalten von Anfragen in deiner Erlebnis, kann
Normale Warteschlange
Normale Warteschlange wird in der FIFO-Reihenfolge unterhalten, in der alle Elemente in die Hinterseite der Warteschlange hinzugefügt und gelesen oder entfernt werden, in der Reihenfolge, in der sie hinzugefügt werden, von der Vorderseite zum beenden.
Prioritätswarteschlange
Die Prioritätswarteschlange folgt nicht der FIFO-Regel, in der jedes Element mit einer Prioritätsnummer hinzugefügt werden kann, die seine Reihenfolge anzeigt oder entfernt. Das Element hinter einer Prioritätswarteschlange hat die Standard priorität 0, und das Element vor der Warteschlange hat die höchste Set-Priorität, die ist 5 im folgenden Beispiel.
Für dieses Beispiel wird ein Artikel mit einer festgelegten Priorität von 3 einer Warteschlange hinzugefügt. Die Warteschlange platziert den neuen Artikel hinter allen bestehenden Artikeln mit der festgelegten Priorität von 3 oder mehr. Um einen Artikel an der Spitze der Warteschlange zu platzieren, musst du die Priorität höher als die aktuelle maximale Set-Priorität festlegen. In diesem Beispiel musst du die Priorität auf 6 oder höher festlegen.
Prioritätswarteschlange sind nützlich für Situationen, in denen Sie Daten basierend auf der Relevanz lesen oder Zugriff auf Daten, anstatt der Relevanz, wollen. Sie können eine Priorität als einen ganzen Zahl festlegen, wenn Sie ein Artikelhinzufügen, und die Warteschlange verarbeitet Elemente mit höherer Priorität vor Elementen mit niedrigeren Prioritäten. Zum Beispiel können Sie Prioritätswarteschlange für Matchmaking verwenden, indem Sie höhere Prioritäten für Benutzer festleg
Warteschlange verwalten
Du kannst MemoryStoreService integrierte Warteschlange verwenden oder Class.Tables Tables verwenden, um Warteschlange für alle anderen Anwendungen zu implementieren. Das folgende Codebeispiel zeigt die Umsetzung einer regulären Warteschlange. Um diese Umsetzung für dein Erlebnis zu verwenden, solltest du es als <
Eine reguläre Warteschlange mit Table implementieren
--! streng
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
-- Überprüfen, ob die Warteschlange leer ist
function Queue.IsEmpty<T>(self: Queue<T>)
return self._first > self._last
end
-- Füge einem Wert einer Warteschlange hinzu
function Queue.Enqueue<T>(self: Queue<T>, value: T)
local last = self._last + 1
self._last = last
self._queue[last] = value
end
-- Entferne einen Wert aus der Warteschlange
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
Das folgende Codebeispiel ist ein Verwendungsbeispiel als Script unter Workspace . Sie können den Codes, die eingebenund den Speicherort anpassen, um Ihre eigene Verwendung anzupassen, solange Sie den vorherigen Codebeispiel-Sammlung richtig gespeichert haben.
Beispiel für die häufige Verwendung von Warteschlangen
local ReplicatedStorage = game:GetService("ReplicatedStorage")local Queue = require(ReplicatedStorage:WaitForChild("Queue"))local myQueue = Queue.new()-- Füge ein paar Werte zur Warteschlange hinzumyQueue:Enqueue(5)myQueue:Enqueue(10)myQueue:Enqueue(15)-- myQueue = {5, 10, 15}-- Entferne einen Wert aus der Warteschlangelocal first = myQueue:Dequeue()print("The first value added to the queue was", first)-- myQueue = { 10, 15 }-- Füge der Warteschlange mehr Werte hinzumyQueue:Enqueue(20)myQueue:Enqueue(25)myQueue:Enqueue(30)-- myQueue = {10, 15, 20, 25, 30}-- Entferne einen weiteren Wert aus der Warteschlangelocal second = myQueue:Dequeue()print("The second value added to the queue was", second)-- myQueue = { 15, 20, 25, 30 }