Sıralar

*Bu içerik, yapay zekâ (beta) kullanılarak çevrildi ve hatalar içerebilir. Sayfayı İngilizce görüntülemek için buraya tıkla.

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.

Normal bir sırayı eklerken, okurken ve silirken öğelerin nasıl sıralanacağını

Ö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.

Bir öğenin belirlenen önceliği, sırayı okuyan öğelerin sırasını değiştirir

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 ekleyin
myQueue:Enqueue(5)
myQueue:Enqueue(10)
myQueue:Enqueue(15)
-- Benim sırayım = { 5, 10, 15 }
-- Sıraya bir değer kaldır
local 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 ekleyin
myQueue:Enqueue(20)
myQueue:Enqueue(25)
myQueue:Enqueue(30)
-- benimSıraya = { 10, 15, 20, 25, 30 }
-- Sıraya başka bir değer kaldır
local second = myQueue:Dequeue()
print("The second value added to the queue was", second)
-- myQueue = { 15, 20, 25, 30 }