File d'attente

*Ce contenu est traduit en utilisant l'IA (Beta) et peut contenir des erreurs. Pour consulter cette page en anglais, clique ici.

Une file d'attente est une structure de données linéaire avec une collection d'éléments.Il existe deux types de files d'attente sur Roblox : files d'attente régulières qui suivent le principe du premier arrivé, premier servi (FIFO), et files d'attente prioritaires qui ont des priorités pour les éléments de la file d'attente qui déterminent l'ordre d'accès aux données.Les éléments dans les deux types de files d'attente peuvent être n'importe quel type de données Luau .

La file d'attente est une structure de données intégrée du service de stockage de données non persistantes nommé , pour lequel vous pouvez appeler directement les fonctions intégrées pour obtenir une file d'attente et ajouter, luou supprimer des données de la file d'attente.Pour tout autre usage, comme la planification des tâches et la gestion des demandes dans votre expérience, vous pouvez utiliser des tables pour implémenter des files d'attente de votre posséderinitiative.

File d'attente régulière

Les files d'attente régulières sont maintenues dans la séquence FIFO, dans laquelle tous les éléments sont ajoutés à la fin de la file d'attente et lus ou supprimés dans le même ordre dans lequel ils sont ajoutés, du début à la terminer.

L'ordre dans lequel une file d'attente régulière ajoute, lit et supprime des éléments

File d'attente prioritaire

Les files d'attente prioritaires ne suivent pas la règle FIFO, dans laquelle chaque élément peut être ajouté avec un numéro de priorité indiquant son ordre de lecture ou de suppression.L'élément à l'arrière d'une file d'attente prioritaire a la priorité par défaut de 0, et l'élément à l'avant de la file d'attente a la priorité la plus élevée, qui est de 5 dans l'exemple suivant.

Les priorités d'un ensemble d'itemmodifient l'ordre dans lequel une file d'attente lit les articles

Pour cet exemple, un élément avec une priorité définie de 3 est ajouté à une file d'attente.La file d'attente place le nouvel élément derrière tous les éléments existants avec la priorité définie de 3 ou plus.Pour placer un élément en tête de file d'attente, vous devez définir la priorité plus élevée que la priorité actuellement la plus élevée.Dans cet exemple, vous devez définir la priorité à 6 ou plus élevée.

Les files d'attente prioritaires sont utiles dans des situations où vous voulez lire ou accéder à des données en fonction de l'ordre d'importance plutôt que de l'ordre d'ajout.Vous pouvez définir une priorité en tant qu'entier lors de l'ajout d'un item, et les processus de file d'attente traitent les éléments avec une priorité plus élevée avant les éléments avec une priorité inférieure.Par exemple, vous pouvez utiliser des files d'attente prioritaires pour le matchmaking en attribuant des priorités plus élevées aux utilisateurs qui ont attendu longtemps.

Implémenter des files d'attente

Vous pouvez utiliser les files d'attente intégrées de MemoryStoreService ou utiliser tables pour implémenter des files d'attente pour tous les autres usages.L'exemple de code suivant montre la mise en œuvre d'une file d'attente ordinaire .Pour utiliser cette implémentation pour votre expérience, vous devez la sauvegarder en tant que ModuleScript et la stocker dans ReplicatedStorage afin que votre file d'attente soit accessible pour le client et le serveur.

Implémentation d'une file d'attente régulière à l'aide de la table

--!严格ement
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
-- Vérifiez si la file d'attente est vide
function Queue.isEmpty<T>(self: Queue<T>)
return self._first > self._last
end
-- Ajouter une valeur à la file d'attente
function Queue.enqueue<T>(self: Queue<T>, value: T)
local last = self._last + 1
self._last = last
self._queue[last] = value
end
-- Supprimer une valeur de la file d'attente
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

L'exemple de code suivant est un exemple d'utilisation en tant que Script sous Workspace .Vous pouvez modifier le code, le taperet l'emplacement de stockage pour s'adapter à votre propre utilisation, à condition que vous ayez correctement stocké l'échantillon de code d'implémentation précédent.

Exemple d'utilisation de file d'attente régulière

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Queue = require(ReplicatedStorage:WaitForChild("Queue"))
local myQueue = Queue.new()
-- Ajoutez quelques valeurs à la file d'attente
myQueue:enqueue(5)
myQueue:enqueue(10)
myQueue:enqueue(15)
-- mon queue = { 5, 10, 15 }
-- Supprimer une valeur de la file d'attente
local first = myQueue:dequeue()
print("The first value added to the queue was", first)
-- mon queue = { 10, 15 }
-- Ajouter plus de valeurs à la file d'attente
myQueue:enqueue(20)
myQueue:enqueue(25)
myQueue:enqueue(30)
-- monQueue = { 10, 15, 20, 25, 30 }
-- Supprimer une autre valeur de la file d'attente
local second = myQueue:dequeue()
print("The second value added to the queue was", second)
-- myQueue = { 15, 20, 25, 30 }