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 primero en salida (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 se pueden cualquier tipo de tipo de datos
La cola es una estructura de datos integrada del servicio almacenamiento de datos no persistente llamado MemoryStoreService , para el cual puedes llamar directamente a las funciones de construcción para obtener una cola y añadir, leídoo eliminar datos de la cola. Para cualquier otro uso, como programar tareas y manejar solicitudes en tu experiencia, puedes usar tablas para implementar colas en tu en posesiónespacio.
Colas Regulares
Las colas regulares se mantienen en la secuencia FIFO, en la que todos los elementos se agregan a la parte trasera de la cola y se leen o eliminan en el mismo orden que se agregan, desde el frente hasta el finalizar.
Colas de prioridad
Las colas de prioridad no siguen la regla FIFO, en la que cada artículo se puede agregar con un número de prioridad que indica su orden de lectura o eliminación. El artículo detrás de una cola de prioridad tiene la prioridad predeterminada de 0, y el artículo delante de la cola tiene la mayor prioridad, que es 5 en el siguiente ejemplo.
Para este ejemplo, se está agregando un artículo con una prioridad predeterminada de 3 a una cola. La cola coloca el nuevo artículo detrás de todos los artículos existentes con la prioridad predeterminada de 3 o más. Para colocar un artículo en la parte delantera de la cola, necesitas establecer la prioridad más alta que la prioridad actual. En este ejemplo, necesitas establecer la prioridad a 6 o superior.
Las colas de prioridad son útiles para situaciones en las que quieres leer o acceder a datos basados en el orden de la importancia en lugar de la orden de la agregación. Puedes configurar una cola como un número cuando agregas un objeto, y los procesos de cola procesan artículos con mayor prioridad antes que los artículos con menor prioridad. Por ejemplo, puedes usar colas de prioridad para el matchmaking asignando mayores prioridades a los usuarios que han estado esperando durante un largo tiempo.
implementando colas
Puede usar colas de MemoryStoreService o usar tablas para implementar colas para todo el uso. El siguiente código de ejemplo muestra la implementación de una cola regular . Para usar esta implementación para su experiencia, debe guardarla como una Class.ModuleScript y almacenarla en 2> Class.ReplicatedStorage
implementar una cola regular utilizando la tabla
--! estricto
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
-- Compruebe si la cola está vacía
function Queue.IsEmpty<T>(self: Queue<T>)
return self._first > self._last
end
-- Agregue 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
-- Elimina un valor de la cola
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
El siguiente código de ejemplo es un ejemplo de uso como Script debajo de Workspace . Puedes modificar el código, introduciry ubicación de almacenamiento para que se adapte a tu propio uso, siempre que tengas el código de implementación anterior guardado correctamente.
Ejemplo de uso de cola regular
local ReplicatedStorage = game:GetService("ReplicatedStorage")local Queue = require(ReplicatedStorage:WaitForChild("Queue"))local myQueue = Queue.new()-- Añade algunos valores a la colamyQueue:Enqueue(5)myQueue:Enqueue(10)myQueue:Enqueue(15)-- myQueue = {5, 10, 15}-- Elimina un valor de la colalocal first = myQueue:Dequeue()print("The first value added to the queue was", first)-- myQueue = { 10, 15 }-- Agrega más valores a la colamyQueue:Enqueue(20)myQueue:Enqueue(25)myQueue:Enqueue(30)-- myQueue = {10, 15, 20, 25, 30}-- Elimina otro valor de la colalocal second = myQueue:Dequeue()print("The second value added to the queue was", second)-- myQueue = { 15, 20, 25, 30 }