キューは、アイテムのコレクションで構成された直列データ構造です。Roblox の 2つのタイプのキューがあります:通常のキュー、優先順位のあるキュー、ルールベースのキュー、2>データのアクセスオーダーを決定する優先順位の
キューは、非持続データストレージ サービスの名前である MemoryStoreService の内蔵データ構造で、キューに直接呼び出しして、キューからデータを取得したり、既読み込んだり、削除したりできます。For any other usage, such as schedu追加es and hands-on requests in your experience, you can use tables
規則的なキュー
正常なキューは、FIFO シーケンスで維持され、すべてのアイテムがキューの後ろに追加され、同じ順序で読み取りまたは削除されます。フロントから最終了まで。
優先順位のキュー
優先キューは、「FIFO」ルールに従わず、各アイテムを優先順位が示す優先数で追加できます。優先キューの後ろのアイテムは、デフォルトの優先度 0 を持ち、キューの前のアイテムは最高優先度 5 を持つようになっています。次の例では、キューの後ろのアイテムがデフォルトの優先度 0 を持ち、キューの前のアイテムが最高優
この例では、3つの設定された優先度のアイテムがキューに追加されています。キューは、3つの設定された優先度のすべての既存のアイテムの後ろに新しいアイテムを追加します。キューの前にアイテムを配置するには、現在の最高優先度の 3 以上の優先度を設定する必要があります。この例では、現在の最高優先度を 6
優先順位キューは、オーダー順序ではなく、オーダー順序以外の順序でデータを読み取りたい場合に便利です。当該アイテムを追加するときは、整数として優先順位を設定できます。また、優先順位を設定すると、優先順位の高いアイテムを優先順位の低いアイテムよりも優先順位の高いアイテムとしてマッチメイキングで
キューを実装中
Class.MemoryStoreService の内蔵キューを使用するか、tables を使用して、他の使用についてキューを実装できます。次のコードサンプルは、実装の 規則的なキュー を示しています。この実装をエクスペリ
テーブルを使用して規則的なキューを実装する
--!厳格
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
-- キューが空であるかどうかをチェック
function Queue.IsEmpty<T>(self: Queue<T>)
return self._first > self._last
end
-- キューに値を追加します
function Queue.Enqueue<T>(self: Queue<T>, value: T)
local last = self._last + 1
self._last = last
self._queue[last] = value
end
-- キューから値を削除する
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
次のコードサンプルは、Script の下で、Workspace の使用例です。コード、タイプ、およびストレージ入力所を変更して、自分の使用に合わせてカスタマイズできます。前の実装コードサンプルを適切に保存している限り、Class.Workspace の使用例を変更することができます。
規則的なキュー使用の例
local ReplicatedStorage = game:GetService("ReplicatedStorage")local Queue = require(ReplicatedStorage:WaitForChild("Queue"))local myQueue = Queue.new()-- キューに値を追加しますmyQueue:Enqueue(5)myQueue:Enqueue(10)myQueue:Enqueue(15)-- myQueue = { 5, 10, 15 }-- キューから 1 つの値を削除するlocal first = myQueue:Dequeue()print("The first value added to the queue was", first)-- myQueue = { 10, 15}-- キューに値を追加するmyQueue:Enqueue(20)myQueue:Enqueue(25)myQueue:Enqueue(30)-- myQueue = { 10、15、20、25、30}-- キューから別の値を削除local second = myQueue:Dequeue()print("The second value added to the queue was", second)-- myQueue = { 15, 20, 25, 30 }