Búferes

*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 primera entrada en primera salida (FIFO), y colas prioritarias , 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 cualquier tipo de dato Luau .

La cola es una estructura de datos integrada del servicio de almacenamiento de datos no persistente nombrado , para el que puedes llamar directamente las funciones integradas para obtener una cola y añadir, leídoo eliminar datos de la cola.Para cualquier otro uso, como la programación de tareas y el manejo de solicitudes en tu experiencia, puedes usar tablas para implementar colas por tu en posesión.

Colas regulares

Las colas regulares se mantienen en la secuencia FIFO, en la que todos los artículos se agreguen al final de la cola y se lean o eliminen en el mismo orden en que se agreguen, de la parte delantera a la parte finalizar.

El orden en que una cola regular añade, lee y elimina artículos

Colas prioritarias

Las colas prioritarias no están siguiendo la regla FIFO, en la que cada artículo se puede agregar con un número de prioridad que indica que se está leyendo o eliminando su orden.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 prioridad más alta establecida, que es 5 en el siguiente ejemplo.

El cambio de prioridad de un conjunto de objetocambia el orden en que una cola lee los elementos

Para este ejemplo, se está agregando un artículo con una prioridad establecida de 3 a una cola.La cola coloca el nuevo artículo detrás de todos los artículos existentes con la prioridad establecida de 3 o más.Para colocar un artículo al frente de la cola, debe establecer la prioridad más alta que la prioridad más alta actual.En este ejemplo, necesitas establecer la prioridad en 6 o superior.

Las colas prioritarias son útiles para situaciones en las que quieres leer o acceder a datos según el orden de importancia en lugar del orden de ser agregados.Puedes establecer una prioridad como entero al agregar un objeto, y los procesos de cola procesan artículos con una prioridad más alta antes que los artículos con una prioridad más baja.Por ejemplo, puedes usar colas prioritarias para emparejar por asignar prioridades más altas a usuarios que han estado esperando mucho tiempo.

Implementar colas

Puedes usar colas integradas de MemoryStoreService o usar tablas para implementar colas para todos los demás usos.El siguiente ejemplo de código muestra la implementación de una cola regular .Para usar esta implementación para tu experiencia, deberías guardarla como ModuleScript y almacenarla en ReplicatedStorage, para que tu cola sea accesible tanto para el cliente como para el servidor.

Implementar una cola regular usando la tabla

--!stricto
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
-- Añade 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("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 ejemplo de código es un ejemplo de uso como Script bajo Workspace .Puedes modificar el código, el introduciry la ubicación de almacenamiento para adaptarlos a tu propio uso, siempre que tengas la muestra de código de implementación anterior almacenada 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 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("The first value added to the queue was", first)
-- myQueue = { 10, 15 }
-- Añade 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("The second value added to the queue was", second)
-- myQueue = { 15, 20, 25, 30 }