Una cola es una estructura de datos lineal con una colección de elementos. Hay dos tipos de colas en Roblox: colas regulares, que siguen el principio de primero en entrar, primero en salir (FIFO), y colas de prioridad, que tienen prioridades para los elementos en la cola que determinan el orden de acceso a los datos. Los elementos en ambos tipos de colas pueden ser de cualquier tipo de dato de Luau.
La cola es una estructura de datos incorporada del servicio de almacenamiento de datos no persistente llamado MemoryStoreService, del cual puedes llamar directamente a las funciones incorporadas para obtener una cola y agregar, leer o eliminar datos de esta. Para cualquier otro uso, como programar tareas y manejar solicitudes en tu juego, puedes usar tablas para implementar colas por tu cuenta.
Colas regulares
Las colas regulares se mantienen en la secuencia FIFO, en la cual todos los elementos se añaden al final de la cola y se leen o eliminan en el mismo orden en el que se añaden, desde el frente hasta el final.

Colas de prioridad
Las colas de prioridad no siguen la regla FIFO, en la cual cada elemento puede ser añadido con un número de prioridad que indica su orden de lectura o eliminación. El elemento al final de una cola de prioridad tiene la prioridad predeterminada de 0, y el elemento al frente de la cola tiene la máxima prioridad establecida, que es 5 en el siguiente ejemplo.

En este ejemplo, un elemento con una prioridad establecida de 3 está siendo añadido a una cola. La cola coloca el nuevo elemento detrás de todos los elementos existentes con una prioridad establecida de 3 o más. Para colocar un elemento al frente de la cola, necesitas establecer una prioridad más alta que la actual máxima prioridad establecida. En este ejemplo, debes establecer la prioridad en 6 o más.
Las colas de prioridad son útiles para situaciones en las que deseas leer o acceder a datos según el orden de importancia en lugar del orden en que fueron añadidos. Puedes establecer una prioridad como un entero al añadir un elemento, y la cola procesa los elementos con mayor prioridad antes que los elementos con prioridades más bajas. Por ejemplo, puedes usar colas de prioridad para emparejamiento asignando mayores prioridades a los usuarios que han estado esperando durante mucho tiempo.
Implementar colas
Puedes usar las colas incorporadas de MemoryStoreService o usar tablas para implementar colas para cualquier otro uso. El siguiente ejemplo de código muestra la implementación de una cola regular. Para usar esta implementación en tu juego, debes guardarla como un ModuleScript y almacenarla en ReplicatedStorage, para que tu cola sea accesible tanto para el cliente como para el servidor.
Implementando una Cola Regular Usando Tabla
--!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
-- Verificar si la cola está vacía
function Queue.isEmpty<T>(self: Queue<T>)
return self._first > self._last
end
-- Agregar un valor a la cola
function Queue.enqueue<T>(self: Queue<T>, value: T)
local last = self._last + 1
self._last = last
self._queue[last] = value
end
-- Eliminar un valor de la cola
function Queue.dequeue<T>(self: Queue<T>): T
if self:isEmpty() then
error("No se puede eliminar de una cola vacía")
end
local first = self._first
local value = self._queue[first]
self._queue[first] = nil
self._first = first + 1
return value
end
return Queue
El siguiente ejemplo de código es un ejemplo de uso como un Script bajo Workspace. Puedes modificar el código, el tipo y la ubicación de almacenamiento para adaptarlo a tu propio uso, siempre que tengas el código de la implementación anterior correctamente almacenado.
Ejemplo de Uso de Cola Regularlocal ReplicatedStorage = game:GetService("ReplicatedStorage")local Queue = require(ReplicatedStorage:WaitForChild("Queue"))local myQueue = Queue.new()-- Agregar algunos valores a la colamyQueue:enqueue(5)myQueue:enqueue(10)myQueue:enqueue(15)-- myQueue = { 5, 10, 15 }-- Eliminar un valor de la colalocal first = myQueue:dequeue()print("El primer valor añadido a la cola fue", first)-- myQueue = { 10, 15 }-- Agregar más valores a la colamyQueue:enqueue(20)myQueue:enqueue(25)myQueue:enqueue(30)-- myQueue = { 10, 15, 20, 25, 30 }-- Eliminar otro valor de la colalocal second = myQueue:dequeue()print("El segundo valor añadido a la cola fue", second)-- myQueue = { 15, 20, 25, 30 }