Filas

*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 linear com uma coleção de itens. Existem dois tipos de filas no Roblox: filas regulares, que seguem o princípio primeiro a entrar primeiro a sair (FIFO), e filas de prioridade, que possuem prioridades para itens na fila que determinam a ordem de acesso aos dados. Itens em ambos os tipos de filas podem ser de qualquer tipo de dado Luau.

A fila é uma estrutura de dados incorporada do serviço de armazenamento de dados não persistente 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 gerenciar solicitações em seu jogo, você pode usar tabelas para implementar filas por conta própria.

Filas regulares

As filas regulares são mantidas na sequência FIFO, na qual todos os itens são adicionados na parte de trás da fila e lidos ou removidos na mesma ordem em que foram adicionados, da frente para o fim.

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

Filas de prioridade

As filas de prioridade não seguem a regra FIFO, em que cada item pode ser adicionado com um número de prioridade que indica sua 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 maior prioridade definida, que é 5 no exemplo a seguir.

A prioridade definida de um item altera a ordem em que a fila lê os itens

Neste exemplo, um item com 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 definida mais alta atual. Neste exemplo, você precisa definir a prioridade como 6 ou mais.

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

Implementar filas

Você pode usar filas incorporadas de MemoryStoreService ou usar tabelas para implementar filas para todos os outros usos. O seguinte exemplo de código mostra a implementação de uma fila regular. Para usar esta implementação em seu jogo, 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 Tabela

--!strict
local Queue = {}
Queue.__index = Queue
export type Queue<T> = typeof(setmetatable(
{} :: {
_primeiro: number,
_ultimo: number,
_fila: { T },
},
Queue
))
function Queue.new<T>(): Queue<T>
local self = setmetatable({
_primeiro = 0,
_ultimo = -1,
_fila = {},
}, Queue)
return self
end
-- Verifica se a fila está vazia
function Queue.isEmpty<T>(self: Queue<T>)
return self._primeiro > self._ultimo
end
-- Adiciona um valor à fila
function Queue.enqueue<T>(self: Queue<T>, value: T)
local ultimo = self._ultimo + 1
self._ultimo = ultimo
self._fila[ultimo] = value
end
-- Remove um valor da fila
function Queue.dequeue<T>(self: Queue<T>): T
if self:isEmpty() then
error("Não é possível desenfileirar de uma fila vazia")
end
local primeiro = self._primeiro
local value = self._fila[primeiro]
self._fila[primeiro] = nil
self._primeiro = primeiro + 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 tipo e a localização de armazenamento para se adequar ao seu próprio uso, desde que você tenha o código de implementação anterior armazenado corretamente.

Exemplo de Uso da Fila Regular

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Queue = require(ReplicatedStorage:WaitForChild("Queue"))
local minhaFila = Queue.new()
-- Adicionar alguns valores à fila
minhaFila:enqueue(5)
minhaFila:enqueue(10)
minhaFila:enqueue(15)
-- minhaFila = { 5, 10, 15 }
-- Remover um valor da fila
local primeiro = minhaFila:dequeue()
print("O primeiro valor adicionado à fila foi", primeiro)
-- minhaFila = { 10, 15 }
-- Adicionar mais valores à fila
minhaFila:enqueue(20)
minhaFila:enqueue(25)
minhaFila:enqueue(30)
-- minhaFila = { 10, 15, 20, 25, 30 }
-- Remover outro valor da fila
local segundo = minhaFila:dequeue()
print("O segundo valor adicionado à fila foi", segundo)
-- minhaFila = { 15, 20, 25, 30 }
©2026 Roblox Corporation, Roblox, o logotipo Roblox e Powering Imagination estão entre nossas marcas registradas e não registradas nos EUA e em outros países.