Antrian adalah struktur data linier dengan koleksi item. Ada dua jenis antrian di Roblox: antrian biasa , yang mengikuti prinsip first-in-first-out (FIFO), dan antrian prioritas , yang memiliki prioritas untuk item dalam antrian yang menentukan urutan akses data. Item dalam kedua jenis antrian dapat menjadi semua jenis Lu
Antrian adalah struktur data bawaan dari layanan penyimpanan data non-persisten bernama MemoryStoreService, di mana Anda dapat langsung memanggil fungsi bawaan untuk mendapatkan antrian dan tambah, dilihat, atau menghapus data dari antrian. Untuk penggunaan lain, seperti menjadwalkan tugas dan menangani permintaan di pengalaman And
Antrian Reguler
Antrian normal dipertahankan dalam urutan FIFO, di mana semua item ditambahkan ke belakang antrian dan dibaca atau dihapus dalam urutan yang sama seperti yang ditambahkan, dari depan ke akhiri.
Antrian Prioritas
Antrian prioritas tidak mengikuti aturan FIFO, di mana setiap item dapat ditambahkan dengan nomor prioritas yang menunjukkan urutannya dibaca atau dihapus. Item di belakang antrian prioritas memiliki prioritas default 0, dan item di depan antrian memiliki prioritas tertinggi, yang adalah 5 dalam contoh berikut.
Untuk contoh ini, item dengan prioritas tertentu 3 ditambahkan ke antrian. Antrian menempatkan item baru di belakang semua item dengan prioritas tertentu 3 atau lebih. Untuk menempatkan item di depan antrian, Anda perlu menetapkan prioritas lebih tinggi dari set prioritas teratas. Dalam contoh ini, Anda perlu menetapkan prioritas 6 atau lebih tinggi.
Antrian prioritas berguna untuk situasi di mana Anda ingin membaca atau mengakses data berdasarkan urutan prioritas bukan urutan ditambahkan. Anda dapat menetapkan prioritas sebagai angka ganjil saat menambahkan item, dan proses antrian memproses item dengan prioritas lebih tinggi sebelum item dengan prioritas lebih rendah. Misalnya, Anda dapat menggunakan antrian prioritas untuk matchmaking dengan menetapkan prioritas tinggi
Menerapkan Antrian
Anda dapat menggunakan antrian bawaan MemoryStoreService atau menggunakan tabel tabels untuk menerapkan antrian untuk semua penggunaan lainnya. Contoh kode berikut menunjukkan implementasi antrian reguler. Untuk menggunakan implementasi ini untuk peng
Menerapkan Antrian Reguler Menggunakan Tabel
--!ketat
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
-- Periksa apakah antrian kosong
function Queue.IsEmpty<T>(self: Queue<T>)
return self._first > self._last
end
-- Tambahkan nilai ke antrian
function Queue.Enqueue<T>(self: Queue<T>, value: T)
local last = self._last + 1
self._last = last
self._queue[last] = value
end
-- Hapus nilai dari antrian
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
Sampel kode berikut adalah contoh penggunaan sebagai Script di bawah Workspace . Anda dapat mengubah kode, ketik, dan lokasi penyimpanan untuk menyesuaikan penggunaan Anda, asalkan Anda memiliki sampel kode implementasi yang benar.
Contoh Penggunaan Antrian Reguler
local ReplicatedStorage = game:GetService("ReplicatedStorage")local Queue = require(ReplicatedStorage:WaitForChild("Queue"))local myQueue = Queue.new()-- Tambahkan beberapa nilai ke antrianmyQueue:Enqueue(5)myQueue:Enqueue(10)myQueue:Enqueue(15)-- antrian = { 5, 10, 15 }-- Hapus satu nilai dari antrianlocal first = myQueue:Dequeue()print("The first value added to the queue was", first)-- antrian = { 10, 15}-- Tambahkan lebih banyak nilai ke antrianmyQueue:Enqueue(20)myQueue:Enqueue(25)myQueue:Enqueue(30)-- antrian = { 10, 15, 20, 25, 30}-- Hapus nilai lain dari antrianlocal second = myQueue:Dequeue()print("The second value added to the queue was", second)-- myQueue = { 15, 20, 25, 30 }