Colas

*Este contenido se traduce usando la IA (Beta) y puede contener errores. Para ver esta página en inglés, haz clic en aquí.

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.

El orden en que una cola regular agrega, lee y elimina elementos

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.

La prioridad establecida de un elemento cambia el orden en que una cola lee elementos

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 Regular

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Queue = require(ReplicatedStorage:WaitForChild("Queue"))
local myQueue = Queue.new()
-- Agregar algunos valores a la cola
myQueue:enqueue(5)
myQueue:enqueue(10)
myQueue:enqueue(15)
-- myQueue = { 5, 10, 15 }
-- Eliminar un valor de la cola
local first = myQueue:dequeue()
print("El primer valor añadido a la cola fue", first)
-- myQueue = { 10, 15 }
-- Agregar más valores a la cola
myQueue:enqueue(20)
myQueue:enqueue(25)
myQueue:enqueue(30)
-- myQueue = { 10, 15, 20, 25, 30 }
-- Eliminar otro valor de la cola
local second = myQueue:dequeue()
print("El segundo valor añadido a la cola fue", second)
-- myQueue = { 15, 20, 25, 30 }
©2026 Roblox Corporation. Roblox, el logotipo de Roblox y "Powering Imagination" son algunas de nuestras marcas registradas y no registradas en los Estados Unidos y otros países.