スタック

*このコンテンツは、ベータ版のAI(人工知能)を使用して翻訳されており、エラーが含まれている可能性があります。このページを英語で表示するには、 こちら をクリックしてください。

スタックは、後入れ先出し (LIFO) の原則に従うアイテムのコレクションを持つ線形データ構造です。スタックの上部はスタックに最近追加されたアイテムであり、スタックの下部は最も最近追加されていないアイテムです。

スタックをディナープレートの積み重ねとして考えることができます:一つのプレートから始め、次にその上に別のプレートを置きます。スタックからプレートを取るとき、スタックから最初に取り出すのは、一番上に置いた最後のプレートです。

スタックには、スタックの上に要素を追加するための push と、スタックの上から要素を取り除くための pop の2つの主要な操作があります。スタックは固定サイズを持つか、動的にサイズを変更することができます。スタックは、バックトラッキングアルゴリズムのような設計用途で便利です。

スタックの実装

Luau には組み込みデータ構造としてのスタックは存在しませんが、テーブル を使用してスタックを実装できます。以下のコードサンプルは、スタックを作成し、オブジェクトをスタックに push し、スタックからオブジェクトを pop する方法を示しています。この実装をゲームで使用するには、ModuleScript として保存し、ReplicatedStorage に格納する必要があります。そうすれば、スタックはクライアントとサーバーの両方からアクセス可能になります。


local Stack = {}
Stack.__index = Stack
function Stack.new()
local self = setmetatable({}, Stack)
self._stack = {}
return self
end
-- スタックが空かどうかを確認する
function Stack:isEmpty()
return #self._stack == 0
end
-- スタックに新しい値を置く
function Stack:push(value)
table.insert(self._stack, value)
end
-- スタックから値を取り出す
function Stack:pop()
if self:isEmpty() then
return nil
end
return table.remove(self._stack, #self._stack)
end
return Stack

以下のコードサンプルは、Workspace 内の Script としての使用例です。以前の実装コードサンプルが正しく保存されていれば、コード、タイプ、およびストレージの場所を独自の使用法に合わせて変更できます。

スタック使用例

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Stack = require(ReplicatedStorage:WaitForChild("Stack"))
local s = Stack.new()
-- スタックを変更する 結果のスタック 出力
s:push(1) -- {1}
s:push(5) -- {1, 5}
s:push(10) -- {1, 5, 10}
print(s:pop()) -- {1, 5} 10
print(s:pop()) -- {1} 5
s:push(20) -- {1, 20}
print(s:pop()) -- {1} 20
print(s:pop()) -- {} 1

何も変更せずに前述のコードサンプルを実行すると、期待される出力は次のようになります:

例の出力

10
5
20
1
©2026 Roblox Corporation。Roblox(ロブロックス)、RobloxロゴおよびPowering Imaginationは、米国並びにその他の国における登録商標および非登録商標です。