Wachtrijen

*Deze inhoud is vertaald met behulp van AI (bèta) en kan fouten bevatten. Klik hier om deze pagina in het Engels te bekijken.

Een wachtrij is een lineaire datastructuur met een verzameling items. Er zijn twee soorten wachtrijen op Roblox: gewone wachtrijen, die het first-in-first-out (FIFO) principe volgen, en prioriteitswachtrijen, die prioriteiten hebben voor items in de wachtrij die de volgorde van gegevenstoegang bepalen. Items in beide soorten wachtrijen kunnen elk Luau gegevenstype zijn.

Wachtrij is een ingebouwde datastructuur van de niet-permanente gegevensopslag service genaamd MemoryStoreService, waarvoor je direct de ingebouwde functies kunt aanroepen om een wachtrij te krijgen en gegevens aan de wachtrij toe te voegen, te lezen of te verwijderen. Voor elk ander gebruik, zoals het plannen van taken en het afhandelen van verzoeken in je game, kun je tabellen gebruiken om zelf wachtrijen te implementeren.

Gewone wachtrijen

Gewone wachtrijen worden onderhouden in de FIFO-volgorde, waarin alle items aan de achterkant van de wachtrij worden toegevoegd en in dezelfde volgorde worden gelezen of verwijderd als ze zijn toegevoegd, van de voorkant naar de achterkant.

De volgorde waarin een gewone wachtrij items toevoegt, leest en verwijdert

Prioriteitswachtrijen

Prioriteitswachtrijen volgen niet de FIFO-regel, waarin elk item kan worden toegevoegd met een prioriteitsnummer dat de volgorde aangeeft waarin het wordt gelezen of verwijderd. Het item aan de achterkant van een prioriteitswachtrij heeft de standaardprioriteit van 0, en het item aan de voorkant van de wachtrij heeft de hoogste ingestelde prioriteit, die 5 is in het volgende voorbeeld.

De ingestelde prioriteit van een item verandert de volgorde waarin een wachtrij items leest

In dit voorbeeld wordt een item met een ingestelde prioriteit van 3 aan een wachtrij toegevoegd. De wachtrij plaatst het nieuwe item achter alle bestaande items met de ingestelde prioriteit van 3 of meer. Om een item aan de voorkant van de wachtrij te plaatsen, moet je de prioriteit hoger instellen dan de huidige hoogste ingestelde prioriteit. In dit voorbeeld moet je de prioriteit op 6 of hoger instellen.

Prioriteitswachtrijen zijn nuttig voor situaties waarin je gegevens wilt lezen of benaderen op basis van de volgorde van belangrijkheid in plaats van de volgorde van toevoeging. Je kunt een prioriteit instellen als een geheel getal bij het toevoegen van een item, en de wachtrij verwerkt items met een hogere prioriteit voordat items met lagere prioriteiten. Je kunt bijvoorbeeld prioriteitswachtrijen gebruiken voor matchmaking door hogere prioriteiten toe te wijzen aan gebruikers die al lange tijd wachten.

Wachtrijen implementeren

Je kunt de ingebouwde wachtrijen van MemoryStoreService gebruiken of tabellen gebruiken om wachtrijen voor alle andere toepassingen te implementeren. Het volgende codevoorbeeld toont de implementatie van een gewone wachtrij. Om deze implementatie voor je game te gebruiken, moet je het opslaan als een ModuleScript en het in ReplicatedStorage opslaan, zodat je wachtrij toegankelijk is voor zowel client als server.

Implementatie van een Gewone Wachtrij met Tabel
--!strict
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
-- Controleer of de wachtrij leeg is
function Queue.isEmpty<T>(self: Queue<T>)
return self._first > self._last
end
-- Voeg een waarde toe aan de wachtrij
function Queue.enqueue<T>(self: Queue<T>, value: T)
local last = self._last + 1
self._last = last
self._queue[last] = value
end
-- Verwijder een waarde uit de wachtrij
function Queue.dequeue<T>(self: Queue<T>): T
if self:isEmpty() then
error("Kan niet uit een lege wachtrij verwijderen")
end
local first = self._first
local value = self._queue[first]
self._queue[first] = nil
self._first = first + 1
return value
end
return Queue

Het volgende codevoorbeeld is een gebruiksvoorbeeld als een Script onder Workspace. Je kunt de code, het type en de opslaglocatie aanpassen aan je eigen gebruik, zolang je de vorige implementatiecode correct hebt opgeslagen.

Voorbeeld van Gewone Wachtrij Gebruik
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Queue = require(ReplicatedStorage:WaitForChild("Queue"))
local myQueue = Queue.new()
-- Voeg enkele waarden toe aan de wachtrij
myQueue:enqueue(5)
myQueue:enqueue(10)
myQueue:enqueue(15)
-- myQueue = { 5, 10, 15 }
-- Verwijder een waarde uit de wachtrij
local first = myQueue:dequeue()
print("De eerste waarde die aan de wachtrij is toegevoegd was", first)
-- myQueue = { 10, 15 }
-- Voeg meer waarden toe aan de wachtrij
myQueue:enqueue(20)
myQueue:enqueue(25)
myQueue:enqueue(30)
-- myQueue = { 10, 15, 20, 25, 30 }
-- Verwijder nog een waarde uit de wachtrij
local second = myQueue:dequeue()
print("De tweede waarde die aan de wachtrij is toegevoegd was", second)
-- myQueue = { 15, 20, 25, 30 }
©2026 Roblox Corporation. Roblox, het Roblox-logo en Powering Imagination behoren tot onze geregistreerde en niet-geregistreerde handelsmerken in de VS en andere landen.