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 reguler , yang mengikuti prinsip FIFO, dan antrian prioritas , yang memiliki prioritas untuk item di antrian yang menentukan urutan akses data.Item dalam kedua jenis antrian dapat menjadi jenis data Luau apa pun.

Antrian adalah struktur data bawaan dari layanan penyimpanan data tidak permanen bernama MemoryStoreService , untuk which Anda dapat langsung memanggil fungsi bawaan untuk mendapatkan antrian dan tambah, dilihat, atau menghapus data dari antrian.Untuk penggunaan lainnya, seperti menjadwalkan tugas dan menangani permintaan di pengalaman Anda, Anda dapat menggunakan tabel untuk menerapkan antrian memiliki.

Antrian biasa

Antrian biasa dipertahankan dalam urutan FIFO, di mana semua item ditambahkan ke bagian belakang antrian dan dibaca atau dihapus dalam urutan yang sama seperti saat ditambahkan, dari depan ke akhiri.

Urutan bagaimana antrian biasa 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 yang dibaca atau dihapus.Item di belakang antrian prioritas memiliki prioritas default 0, dan item di depan antrian memiliki prioritas tertinggi, yaitu 5 dalam contoh berikut.

Prioritas tetap item mengubah urutan di mana antrian membaca item

Untuk contoh ini, item dengan prioritas yang ditetapkan 3 ditambahkan ke antrian.Antrian menempatkan item baru di belakang semua item yang ada dengan prioritas yang ditetapkan 3 atau lebih.Untuk menempatkan item di depan antrian, Anda perlu mengatur prioritas lebih tinggi dari prioritas tertinggi saat ini.Dalam contoh ini, Anda perlu mengatur prioritas ke 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 bilangan bulat saat menambahkan item, dan proses antrian memproses item dengan prioritas lebih tinggi sebelum item dengan prioritas lebih rendah.Sebagai contoh, Anda dapat menggunakan antrian prioritas untuk matchmaking dengan menugaskan prioritas yang lebih tinggi kepada pengguna yang telah menunggu untuk waktu yang lama.

Implementasikan antrian

Anda dapat menggunakan antrian bawaan dari MemoryStoreService atau menggunakan tabel untuk menerapkan antrian untuk semua penggunaan lainnya.Contoh kode berikut menunjukkan implementasi sebuah antrian biasa .Untuk menggunakan implementasi ini untuk pengalaman Anda, Anda harus menyimpannya sebagai ModuleScript dan menyimpannya di ReplicatedStorage , sehingga antrian Anda dapat diakses oleh klien dan server.

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

Contoh kode berikut adalah contoh penggunaan sebagai Script di bawah Workspace .Anda dapat memodifikasi kode, ketik, dan lokasi penyimpanan untuk sesuai dengan penggunaan Anda sendiri, selama Anda memiliki sampel kode implementasi sebelumnya yang disimpan dengan 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 saya = { 5, 10, 15 }
-- Hapus satu nilai dari antrian
local first = myQueue:dequeue()
print("The first value added to the queue was", first)
-- antrian saya = { 10, 15 }
-- Tambahkan lebih banyak nilai ke antrian
myQueue:enqueue(20)
myQueue:enqueue(25)
myQueue:enqueue(30)
-- antrian saya = { 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 }