Antrian

*Konten ini diterjemahkan menggunakan AI (Beta) dan mungkin mengandung kesalahan. Untuk melihat halaman ini dalam bahasa Inggris, klik di sini.

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.

Urutan bagaimana antrian normal menambahkan, membaca, dan menghapus item

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.

Sebuah perubahan prioritas item mengubah urutan dalam which a queue membaca item

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 antrian
myQueue:Enqueue(5)
myQueue:Enqueue(10)
myQueue:Enqueue(15)
-- antrian = { 5, 10, 15 }
-- Hapus satu nilai dari antrian
local first = myQueue:Dequeue()
print("The first value added to the queue was", first)
-- antrian = { 10, 15}
-- Tambahkan lebih banyak nilai ke antrian
myQueue:Enqueue(20)
myQueue:Enqueue(25)
myQueue:Enqueue(30)
-- antrian = { 10, 15, 20, 25, 30}
-- Hapus nilai lain dari antrian
local second = myQueue:Dequeue()
print("The second value added to the queue was", second)
-- myQueue = { 15, 20, 25, 30 }