Una coda è una struttura dati lineare con una collezione di elementi. Ci sono due tipi di coda su Roblox: coda regolare, che segue il principio first-in-first-out (FIFO), e coda di priorità, che hanno priorità per gli elementi nella coda che determinano l'ordine di accesso ai dati. Gli elementi in entrambi i tipi di coda possono essere qualsiasi tipo di dati Luau <
La coda è una struttura dati incorporata del servizio non persistente storage del dati chiamato MemoryStoreService , per il quale puoi chiamare direttamente le funzioni incorporate 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 le tabelle
Regolari code di attesa
Le regole di espansione regolari vengono mantenute nell'ordine di FIFO, in cui tutti gli elementi vengono aggiunti alla fine della coda e letti o rimossi nello stesso ordine in cui vengono aggiunti, dalla parte anteriore alla parte Terminare.
Coda di priorità
Le code di priorità 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 di 3 viene aggiunto a una coda. La coda posiziona il nuovo oggetto dietro tutti gli altri oggetti con la priorità impostata di 3 o più. Per posizionare un oggetto alla prima posizione della coda, devi impostare la priorità più alta di quella attuale. In questo esempio, devi impostare la priorità su 6 o superiore.
Le code di priorità sono utili per situazioni in cui vuoi leggere o accedere ai dati in base all'ordine di importanza invece che l'ordine di aggiungere. Puoi impostare una priorità come un numero intero quando aggiungi un Articolo, e i processi di coda elaborano gli oggetti con una priorità più alta prima degli oggetti con una priorità inferiore. Ad esempio, puoi utilizzare le code di priorità per il matchmaking assegnando maggiori priorità agli utenti che hanno aspettato a lungo.
Realizzazione delle code
Puoi utilizzare le code di MemoryStoreService o tabelle per implementare le code per tutti gli altri utilizzi. Il seguente esempio di codice mostra l'implementazione di una queued regolare . Per utilizzare questa implementazione per la tua esperienza, dovresti salvarla come 1>Class.ModuleScript1> e memor
Realizzazione di una coda regolare utilizzando Table
--! sever
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 codice di esempio è un esempio di utilizzo come Script sotto Workspace . Puoi modificare il codice, il inserisci / scrivie la posizione di archiviazione per adattarti all'uso personale, fintanto che hai il precedente esempio 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 }