Una coda è una struttura dati lineare con una raccolta di elementi.Esistono due tipi di code su Roblox: code regolari , che seguono il principio first-in-first-out (FIFO), e code prioritarie , che hanno priorità per gli elementi nella code che determinano l'ordine di accesso ai dati.Gli elementi in entrambi i tipi di code possono essere qualsiasi tipo di dati Luau .
La coda è una struttura di dati integrata del servizio di archiviazione non persistente dati chiamato MemoryStoreService , per il quale puoi chiamare direttamente le funzioni integrate per ottenere una coda e aggiungere or Inserire, leggere o rimuovere dati dalla coda.Per qualsiasi altro uso, come la programmazione delle attività e la gestione delle richieste nella tua esperienza, puoi utilizzare tabelle per implementare le code sul tuo Proprio.
Code regolari
Le code regolari sono mantenute nella sequenza FIFO, in cui tutti gli elementi vengono aggiunti alla fine della coda e letti o rimossi nello stesso ordine in cui vengono aggiunti, dall'inizio alla Terminare.

File di priorità
Le code prioritarie non seguono la regola FIFO, in cui ogni elemento può essere aggiunto con un numero di priorità che indica il suo ordine di lettura o rimozione.L'elemento alla fine di una coda di priorità ha la priorità predefinita di 0 e l'elemento alla fine della coda ha la priorità più alta, che è 5 nel seguente esempio.

Per questo esempio, un oggetto con una priorità impostata su 3 viene aggiunto a una coda.La coda posiziona il nuovo oggetto dietro tutti gli oggetti esistenti con la priorità impostata di 3 o più.Per posizionare un oggetto in prima posizione nella coda, devi impostare la priorità più alta rispetto alla priorità più alta attualmente impostata.In questo esempio, devi impostare la priorità a 6 o superiore.
Le code prioritarie sono utili per situazioni in cui vuoi leggere o accedere ai dati in base all'ordine di importanza anziché all'ordine di aggiunta.Puoi impostare una priorità come intero quando aggiungi un Articoloe i processi di coda elaborano gli oggetti con priorità più alta prima degli oggetti con priorità più bassa.Ad esempio, puoi utilizzare le code di priorità per il matchmaking assegnando priorità più elevate agli utenti che hanno aspettato a lungo.
Implementa code di coda
Puoi utilizzare le code integrate di MemoryStoreService o usare tabelle per implementare le code per tutti gli altri usi.Il seguente esempio di codice mostra l'implementazione di una coda regolare .Per utilizzare questa implementazione per la tua esperienza, dovresti salvarla come ModuleScript e conservarla in ReplicatedStorage , in modo che la tua coda sia accessibile sia per il client che per il Server.
Implementazione di una coda regolare utilizzando la tabella
--!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
-- Controlla se la coda è vuota
function Queue.isEmpty<T>(self: Queue<T>)
return self._first > self._last
end
-- Aggiungi un valore alla coda
function Queue.enqueue<T>(self: Queue<T>, value: T)
local last = self._last + 1
self._last = last
self._queue[last] = value
end
-- Rimuovi un valore dalla coda
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
Il seguente esempio di codice è un esempio di utilizzo come Script sotto Workspace .Puoi modificare il codice, il inserisci / scrivie la posizione di archiviazione per adattarlo al tuo uso, a patto di avere il precedente campione di codice di implementazione correttamente archiviato.
Esempio di utilizzo della coda regolare
local ReplicatedStorage = game:GetService("ReplicatedStorage")local Queue = require(ReplicatedStorage:WaitForChild("Queue"))local myQueue = Queue.new()-- Aggiungi alcuni valori alla codamyQueue:enqueue(5)myQueue:enqueue(10)myQueue:enqueue(15)-- myQueue = { 5, 10, 15 }-- Rimuovi un valore dalla codalocal first = myQueue:dequeue()print("The first value added to the queue was", first)-- myQueue = { 10, 15 }-- Aggiungi più valori alla codamyQueue:enqueue(20)myQueue:enqueue(25)myQueue:enqueue(30)-- myQueue = { 10, 15, 20, 25, 30 }-- Rimuovi un altro valore dalla codalocal second = myQueue:dequeue()print("The second value added to the queue was", second)-- myQueue = { 15, 20, 25, 30 }