Bir sıra, bir koleksiyonu olan lineer bir veri yapısıdır. Roblox'ta iki tür sıra vardır: normal sıralar, ilk-gel-son (FIFO) ilkesine uyar ve öncelik sıraları, kuyrukta bulunan veriye erişim sırasını belirler. Her iki tür sıraya da Luau <
Sıra, persistente olmayan veri depolama hizmetinin adını verdiği MemoryStoreService için kullanıcıların direkt olarak kullanıcı işlevlerini çağırabilir ve eklemek, okumak veya kaldırmak için verileri sıraya koyabilirsiniz. Diğer kullanımlar, takviz görevleri
Sıradan Kuyruklar
Düzenli kuyruklar FIFO sırasında korunur, bu sırada tüm öğeler sıraya arka tarafa eklenir ve okunur veya kaldırılır, sırayla cepheye kadar okunur ve kaldırılır.
Öncelik Sıraları
Öncelik kuyrukları FIFO kurallarını takip etmez, bu kurallarda her öğe okunupya dağıtılabilir bir öncelik numarası ile eklenebilir. Öncelik kuyruğunun arkasındaki öğenin varsayılan önceliği 0'dır ve öncelik kuyruğunun önündeki öğenin en yüksek belirlenmiş önceliği 5'tir, şu örnekteki gibi.
Bu örnek için, 3'lü bir öncelik alanı olan bir öğe sıraya ekleniyor. Sıraya, yeni öğe 3'lü öncelikli tüm öğelerin arkasında yerleştirilir. Sıraya önceliği 3 veya daha yüksek olarak belirlenmiş tüm öğelerin arkasında ayarlamak gerekir. Bu örnekte, önceliği 6 veya daha yü
Öncelik kuyrukları, öncelik sırası yerine veri okumak veya erişmek istediğiniz durumlarda yararlıdır. Bir öğeyi eklemekte, bir öncelik olarak bir sayı olarak ayarlayabilirsiniz ve kuyruk işlemleri daha düşük öncelikli öğelerden daha yüksek öncelikli öğeleri işler. Örneğin, uzun süredir bekleyen
Sıraların Uygulanması
Class.MemoryStoreService İçindeki hızlı kuyrukları kullanabilir veya tabloları kullanarak tüm diğer kullanımlar için kuyrukları uygulayabilirsiniz. İşlemin kullanımı için aşağıdaki kod ör
Tablosunu Kullanarak Düzenli Bir Sırayı Gerçekleştirme
--!kısıtlanmış
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
-- Sıranın boş olduğunu kontrol et
function Queue.IsEmpty<T>(self: Queue<T>)
return self._first > self._last
end
-- Sıraya bir değer ekleyin
function Queue.Enqueue<T>(self: Queue<T>, value: T)
local last = self._last + 1
self._last = last
self._queue[last] = value
end
-- Sırayından bir değeri kaldır
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
Aşağıdaki kod örneği, Script olarak kullanım örneğidir altında Workspace . Kodu, yazve depolama konumunu kendi kullanımınıza göre değiştirebilirsiniz, as long as you have the previous implementation code sample properly stored.
Sıradan Sıra Kullanımı Örneği
local ReplicatedStorage = game:GetService("ReplicatedStorage")local Queue = require(ReplicatedStorage:WaitForChild("Queue"))local myQueue = Queue.new()-- Sıraya bazı değerler ekleyinmyQueue:Enqueue(5)myQueue:Enqueue(10)myQueue:Enqueue(15)-- Benim sırayım = { 5, 10, 15 }-- Sıraya bir değer kaldırlocal first = myQueue:Dequeue()print("The first value added to the queue was", first)-- Benim sırayım = { 10, 15 }-- Sıraya daha fazla değer ekleyinmyQueue:Enqueue(20)myQueue:Enqueue(25)myQueue:Enqueue(30)-- benimSıraya = { 10, 15, 20, 25, 30 }-- Sıraya başka bir değer kaldırlocal second = myQueue:Dequeue()print("The second value added to the queue was", second)-- myQueue = { 15, 20, 25, 30 }