Fileiras

*Este conteúdo é traduzido por IA (Beta) e pode conter erros. Para ver a página em inglês, clique aqui.

Uma fila é uma estrutura de dados lineares com uma coleção de itens.Existem dois tipos de filas no Roblox: filas regulares , que seguem o princípio de primeiro a entrar, primeiro a sair (FIFO), e filas prioritárias , que têm prioridades para itens na fila que determinam a ordem de acesso aos dados.Itens em ambos os tipos de filas podem ser qualquer tipo de dado Luau .

A fila é uma estrutura de dados integrada do serviço de armazenamento de dados não persistentes chamado , para o qual você pode chamar diretamente as funções integradas para obter uma fila e adicionar, ler ou remover dados da fila.Para qualquer outro uso, como agendamento de tarefas e processamento de solicitações em sua experiência, você pode usar tabelas para implementar filas por conta possuir.

Fileiras regulares

Fileiras regulares são mantidas na sequência FIFO, na qual todos os itens são adicionados ao fim da fila e lidos ou removidos na mesma ordem em que são adicionados, da frente para o terminar/parar/sair.

A ordem de como uma fila regular adiciona, lê e remove itens

Fileiras de prioridade

As filas de prioridade não estão seguindo a regra FIFO, na qual cada item pode ser adicionado com um número de prioridade que indica a ordem de leitura ou remoção.O item na parte de trás de uma fila de prioridade tem a prioridade padrão de 0 e o item na frente da fila tem a prioridade mais alta definida, que é 5 no seguinte exemplo.

As alterações de prioridade de um item mudam a ordem em que uma fila lê itens

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 mais alta atual.Neste exemplo, você precisa definir a prioridade para 6 ou superior.

As filas de prioridade são úteis para situações em que você deseja ler ou acessar dados com base na ordem de importância, em vez da ordem de ser adicionado.Você pode definir uma prioridade como um inteiro ao adicionar um item, e os processos de fila processam itens com prioridade mais alta antes de itens com prioridades mais baixas.Por exemplo, você pode usar filas de prioridade para matchmaking atribuindo prioridades mais altas a usuários que estiveram esperando por muito tempo.

Implementar filas

Você pode usar filas integradas de MemoryStoreService ou usar mesas para implementar filas para todos os outros usos.O seguinte exemplo de código mostra a implementação de uma fila regular .Para usar essa implementação para sua experiência, você deve salvá-la como um ModuleScript e armazená-la em ReplicatedStorage, para que sua fila seja acessível tanto para o cliente quanto para o servidor.

Implementando uma fila regular usando a tabela

--!stringente
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 exemplo de código é um exemplo de uso como um Script sob Workspace .Você pode modificar o código, o digitare a localização de armazenamento para se encaixar no seu próprio uso, desde que você tenha o código de amostra de implementação anterior armazenado corretamente.

Exemplo de Uso de Fila Normal

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Queue = require(ReplicatedStorage:WaitForChild("Queue"))
local myQueue = Queue.new()
-- Adicione alguns valores à fila
myQueue:enqueue(5)
myQueue:enqueue(10)
myQueue:enqueue(15)
-- minha fila = { 5, 10, 15 }
-- Remova um valor da fila
local first = myQueue:dequeue()
print("The first value added to the queue was", first)
-- minha fila = { 10, 15 }
-- Adicione mais valores à fila
myQueue:enqueue(20)
myQueue:enqueue(25)
myQueue:enqueue(30)
-- minha fila = { 10, 15, 20, 25, 30 }
-- Remova outro valor da fila
local second = myQueue:dequeue()
print("The second value added to the queue was", second)
-- myQueue = { 15, 20, 25, 30 }