Uma fila é uma estrutura de dados linear com uma coleção de itens. Existem dois tipos de filas na Roblox: filas regulares, que seguem o princípio de primeiro a primeiro a sair (FIFO), e filas de prioridade, que têm prioridades para os itens na fila que determinam a ordem de acesso aos dados. Os itens em ambos os tipos de filas podem ser qualquer tipo
A fila é uma estrutura de dados incorporada do serviço non-persistent data storage chamado MemoryStoreService, para o qual você pode chamar diretamente as funções incorporadas para obter uma fila e adicionar, ler ou remover dados da fila. Para qualquer outro uso, como agendar tarefas e lidar com solicitações em sua experiência, você pode usar tabelas para implementar filas na sua possuir.
Filas Regulares
Na sequência FIFO, filas regulares são mantidas, na qual todos os itens são adicionados à parte de trás da fila e lidos ou removidos na mesma ordem que eles são adicionados, da frente para o terminar/parar/sair.
Prioridade de Queue
As filas de prioridade não seguem a regra FIFO, na qual cada item pode ser adicionado com um número de prioridade que indica sua ordem está sendo lida ou removida. O item na parte de trás de uma fila de prioridade tem a prioridade padrão de 0, e o item na parte de frente da fila tem a maior prioridade, que é 5 no seguinte exemplo.
Para este exemplo, um item com uma prioridade definida de 3 está sendo adicionado a uma fila. A fila coloca o novo item atrás de todos os itens existentes com a prioridade definida de 3 ou mais. Para colocar um item na frente da fila, você precisa definir a prioridade mais alta que a prioridade atual mais alta. Neste exemplo, você precisa definir a prioridade para 6 ou mais.
Prioridade de itens é útil para situações em que você quer ler ou acessar dados com base no ordem de importância em vez do ordem de ser adicionado. Você pode configurar uma prioridade como um número quando adicionar um item, e o processo de fila processa itens com maior prioridade antes de itens com prioridades mais baixas. Por exemplo, você pode usar filas de prioridade para a criação de partidas, atribuindo prioridades mais altas a usuários que estão esperando por um longo tempo.
implementando filas
Você pode usar filas incorporadas de MemoryStoreService ou usar tabelas para implementar filas para todos os outros usos. O exemplo de código a seguir mostra a implementação de uma fila regular . Para usar esta implementação para sua experiência, você deve salvá-la como um 2>Class.ModuleScript2>
Aplicando uma fila regular usando a tabela
--!estrutto
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
-- Verifique se a fila está vazia
function Queue.IsEmpty<T>(self: Queue<T>)
return self._first > self._last
end
-- Adicione um valor à fila
function Queue.Enqueue<T>(self: Queue<T>, value: T)
local last = self._last + 1
self._last = last
self._queue[last] = value
end
-- Remova um valor da fila
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
O seguinte código de exemplo é um exemplo de uso como um Script sob Workspace. Você pode modificar o código, digitare local de armazenamento para se ajustar à sua própria experiência, desde que você tenha o código de implementação anterior armazenado corretamente.
Exemplo de Uso de Fila Regular
local ReplicatedStorage = game:GetService("ReplicatedStorage")local Queue = require(ReplicatedStorage:WaitForChild("Queue"))local myQueue = Queue.new()-- Adicione alguns valores à filamyQueue:Enqueue(5)myQueue:Enqueue(10)myQueue:Enqueue(15)-- myQueue = { 5, 10, 15 }-- Remova um valor da filalocal first = myQueue:Dequeue()print("The first value added to the queue was", first)-- myQueue = { 10, 15 }-- Adicione mais valores à filamyQueue:Enqueue(20)myQueue:Enqueue(25)myQueue:Enqueue(30)-- myQueue = { 10, 15, 20, 25, 30 }-- Remova outro valor da filalocal second = myQueue:Dequeue()print("The second value added to the queue was", second)-- myQueue = { 15, 20, 25, 30 }