Warteschlangen

*Dieser Inhalt wurde mit KI (Beta) übersetzt und kann Fehler enthalten. Um diese Seite auf Englisch zu sehen, klicke hier.

Eine Warteschlange ist eine lineare Datenstruktur mit einer Sammlung von Artikeln.Es gibt zwei Arten von Warteschlangen auf Roblox: reguläre Warteschlangen, die dem Prinzip des First-in-First-Out (FIFO) folgen, und Prioritätswarteschlangen, die Prioritäten für Elemente in der Warteschlange haben, die die Datenzugriffsreihenfolge bestimmen.Artikel in beiden Arten von Warteschlangen können jede Art von Luau Datentyp sein.

Die Warteschlange ist eine integrierte Datenstruktur des nicht persistenten Datenspeichers -Dienstes namens MemoryStoreService, für den Sie die integrierten Funktionen direkt aufrufen können, um eine Warteschlange zu erhalten, Daten hinzuzufügen, zu gelesenoder zu entfernen.Für jede andere Verwendung, wie die Planung von Aufgaben und das Bearbeiten von Anfragen in deiner Erlebnis, kannst du Tabellen verwenden, um Warteschlangen auf eigene besitzenzu implementieren.

Normale Warteschlangen

Normale Warteschlangen werden in der FIFO-Sequenz verwaltet, in der alle Artikel am Ende der Warteschlange hinzugefügt und gelesen oder entfernt werden, in der gleichen Reihenfolge, in der sie hinzugefügt werden, von vorne bis beenden.

Die Reihenfolge, in der eine reguläre Warteschlange Elemente hinzufügt, liest und entfernt

Prioritäts-Warteschlangen

Prioritätswarteschlangen folgen nicht der FIFO-Regel, in der jedes Element mit einer Prioritätsnummer hinzugefügt werden kann, die anzeigt, dass seine Reihenfolge gelesen oder entfernt wird.Das Element am Ende einer Prioritätswarteschlange hat die Standardpriorität von 0 und das Element an der Spitze der Warteschlange hat die höchste festgelegte Priorität, die im folgenden Beispiel 5 ist.

Die prioritätsänderung eines Artikeländert die reihenfolge, in der eine warteschlange artikel liest

Für dieses Beispiel wird ein Artikel mit einer festgelegten Priorität von 3 einer Warteschlange hinzugefügt.Die Warteschlange legt das neue Element hinter alle vorhandenen Artikel mit der festgelegten Priorität von 3 oder mehr.Um ein Element an die Spitze der Warteschlange zu stellen, musst du die Priorität höher als die derzeit höchste festlegen.In diesem Beispiel musst du die Priorität auf 6 oder höher festlegen.

Prioritäts-Warteschlangen sind nützlich für Situationen, in denen Sie Daten lesen oder auf der Grundlage der Reihenfolge der Priorität zugreifen möchten, anstatt auf der Grundlage der Reihenfolge der Hinzufügung.Sie können eine Priorität als Ganzzahl festlegen, wenn Sie ein Artikelhinzufügen, und die Warteschlange verarbeitet Elemente mit höherer Priorität vor Elementen mit niedrigerer Priorität.Zum Beispiel können Sie Prioritätswarteschlangen für das Matchmaking verwenden, indem Sie höhere Prioritäten den Benutzern zuweisen, die seit langem warten.

Implementiere Warteschlangen

Du kannst integrierte Warteschlangen von MemoryStoreService oder Tabellen verwenden, um Warteschlangen für alle anderen Verwendungszwecke zu implementieren.Das folgende Codebeispiel zeigt die Implementierung einer normalen Warteschlange .Um diese Implementierung für deine Erlebniszu verwenden, solltest du sie als ModuleScript speichern und in ReplicatedStorage speichern, damit deine Warteschlange sowohl für den Client als auch für den Server zugänglich ist.

Eine regelmäßige Warteschlange mit Tabelle 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üfe, ob die Warteschlange leer ist
function Queue.isEmpty<T>(self: Queue<T>)
return self._first > self._last
end
-- Füge einen Wert zur 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.Du kannst den Codes, die eingebenund den Speicherort modifizieren, um sie an deine eigene Nutzung anzupassen, solange du den zuvor gespeicherten Implementierungs-Code-Probemuster richtig gespeichert hast.

Beispiel für regelmäßige Warteschlangenbenutzung

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Queue = require(ReplicatedStorage:WaitForChild("Queue"))
local myQueue = Queue.new()
-- Füge einige Werte zur Warteschlange hinzu
myQueue:enqueue(5)
myQueue:enqueue(10)
myQueue:enqueue(15)
-- meineWarteschlange = { 5, 10, 15 }
-- Entferne einen Wert aus der Warteschlange
local first = myQueue:dequeue()
print("The first value added to the queue was", first)
-- meineWarteschlange = { 10, 15 }
-- Füge mehr Werte zur Warteschlange hinzu
myQueue:enqueue(20)
myQueue:enqueue(25)
myQueue:enqueue(30)
-- meineWarteschlange = { 10, 15, 20, 25, 30 }
-- Entferne einen anderen Wert aus der Warteschlange
local second = myQueue:dequeue()
print("The second value added to the queue was", second)
-- myQueue = { 15, 20, 25, 30 }