テーブル

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

テーブルデータ型は、nil以外の任意の型の複数の値を格納でき、ブール値数字文字列関数、および他のテーブルを含みます。テーブルは波括弧({})を使用して作成します:


-- 変数 "t" に割り当てられた空のテーブルを構築
local t = {}
print(t) -- {}

テーブルは配列辞書として使用できます。配列は数値の順序リストをインデックスとして使用しますが、辞書は数値、文字列、およびオブジェクトをインデックスとして持つことができます。

テーブルを操作するための組み込み関数の詳細については、tableライブラリを参照してください。

配列

配列は値の順序リストです。配列は、特別な権限を持つプレイヤーのグループなど、データのコレクションを保存するのに便利です。

配列の作成

Luauテーブルを使用して配列を作成するには、値を順番に宣言し、カンマで区切ります。


-- 三項目からなる配列を構築
local testArray = {"A string", 3.14159, true}
print(testArray)

配列からの読み取り

配列から読み取るには、参照の後に一対の角括弧を追加し、その中に要素のインデックス番号を指定します([pos]):


-- 三項目からなる配列を構築
local testArray = {"A string", 3.14159, true}
print(testArray[1]) -- A string
print(testArray[2]) -- 3.14159
print(testArray[3]) -- true

配列への書き込み

インデックスでの配列の値を定義または書き換えるには、角括弧([index])にインデックス番号を指定し、その後に=と値を追加します。


local testArray = {"A string", 3.14159, true}
testArray[2] = 12345
testArray[4] = "New string"
print(testArray[2]) -- 12345
print(testArray[4]) -- New string

配列の反復処理

配列を反復処理するには、forループを使用できます。配列には数値のインデックスがあるため、数値のforループを1から配列の長さ(#array)まで使用することもできます。


local testArray = {"A string", 3.14159, true, "New string"}
-- 一般的な反復を使用してループ処理
for index, value in testArray do
print(index, value)
end
-- 配列の長さ演算子(`#`)を使用して反復処理
for index = 1, #testArray do
print(index, testArray[index])
end

アイテムの挿入

配列の末尾にアイテムを挿入するための組み込みの方法が2つあります:

  • 配列への参照とアイテムの値を渡すtable.insert()関数を使用します。
  • array[#array+1]構文を使用して新しいアイテムを配列に追加します。

local testArray = {"A string", 3.14159}
table.insert(testArray, "New string")
testArray[#testArray+1] = "Another new string"
print(testArray[3]) -- New string
print(testArray[4]) -- Another new string

配列の開始と終了の間にアイテムを挿入するには、table.insert()の2番目の引数として位置の値を含めます。これにより、新しいアイテムが挿入され、以降のアイテムは1つ上のインデックスに押し上げられます。


local testArray = {"First item", "Next item"}
table.insert(testArray, 2, "NEW ITEM #2")
print(testArray[1]) -- First item
print(testArray[2]) -- NEW ITEM #2
print(testArray[3]) -- Next item

アイテムの削除

配列からアイテムを削除するには、table.remove()を使用します。これは、指定された位置のアイテムを削除し、以降のアイテムを1つ後ろのインデックスに移動させます。


local testArray = {"First item", "Next item", "Last item"}
table.remove(testArray, 2)
print(testArray[1]) -- First item
print(testArray[2]) -- Last item

辞書

辞書は配列の拡張です。辞書は、キーと値のペアのセットを保存し、キーは任意の数値、文字列、またはオブジェクトであることができます。

辞書の作成

辞書テーブルを作成するには、それぞれのキー=の後に定義し、を指定します。各キーと値のペアをカンマで区切ります:


local testDictionary = {
fruitName = "Lemon",
fruitColor = "Yellow",
sour = true
}

辞書のキーは数値、文字列、およびオブジェクトであることができます。たとえば、キーはInstanceでもかまいません。オブジェクトをキーとして使用するには、角括弧([key])を使用してキーを宣言します:


local part = Instance.new("Part")
local testDictionary = {
partType = "Block",
[part] = true
}

辞書からの読み取り

辞書から読み取るには、参照の後に一対の括弧を追加し、キー名を指定します。直接文字列キーを参照するには、["key"]または.keyを使用するか、変数の値を使用します([key])。


local part = Instance.new("Part")
local testDictionary = {
partType = "Block",
[part] = true
}
-- 文字列キーには引用符を含めます
print(testDictionary["partType"]) -- Block
-- または、スペースのない文字列キーをインデックスするために`.`を使用します
print(testDictionary.partType) -- Block
-- 非文字列キーには引用符を省略します
print(testDictionary[part]) -- true

辞書への書き込み

新しい辞書キーまたは既存の辞書キーの値を定義または書き換えるには、ブラケット([key])でキー名を宣言するか、キーが文字列の場合は(.key)の後に=と値を追加します。


local testDictionary = {
fruitName = "Lemon",
sour = true
}
-- 既存のキーの値を変更
testDictionary["fruitName"] = "Cherry"
testDictionary.sour = false
-- 新しいキーと値のペアを挿入
testDictionary.fruitCount = 10
print(testDictionary.fruitName) -- Cherry
print(testDictionary.sour) -- false
print(testDictionary.fruitCount) -- 10

辞書の反復処理

辞書を反復処理するには、forループを使用します:


local testDictionary = {
fruitName = "Lemon",
fruitColor = "Yellow",
sour = true
}
for key, value in testDictionary do
print(key, value)
end
--[[ 結果出力:
fruitName Lemon
sour true
fruitColor Yellow
]]

キーと値のペアの削除

辞書からキーと値のペアを削除または消去するには、そのキーの値をnilに設定します。


local testDictionary = {
fruitName = "Lemon",
fruitColor = "Yellow",
sour = true
}
testDictionary.sour = nil
for key, value in testDictionary do
print(key, value)
end
--[[ 結果出力:
fruitName Lemon
fruitColor Yellow
]]

参照としてのテーブル

新しい変数にテーブルを保存すると、Luauはそのテーブルのコピーを作成しません。代わりに、変数は元のテーブルへの参照またはポインタになります。テーブルへのすべての参照は、元のテーブルへの変更を反映します:


local originalArray = {10, 20}
local arrayReference = originalArray
print("Original:", originalArray[1], originalArray[2])
print("Reference:", arrayReference[1], arrayReference[2])
-- 元の配列の値を変更
originalArray[1] = 1000
originalArray[2] = 2000
print("Reference:", arrayReference[1], arrayReference[2])
--[[ 結果出力:
Original: 10 20
Reference: 10 20
Reference: 1000 2000
]]

テーブルのクローン

シャロークローン

ネストされたテーブルを含まずにテーブルをコピーするには、Luauはtable.clone()メソッドを提供しています。


local original = {
key = "value",
engine = "Roblox",
playerID = 505306092
}
local clone = table.clone(original)

ディープクローン

ネストされたテーブルを含むより複雑なテーブルをコピーするには、次のような再帰関数を使用する必要があります:


-- テーブルをディープクローンするために使用される関数
local function deepClone(original)
-- コピーのための新しいテーブルを定義
local clone = table.clone(original)
-- オリジナルのテーブルをループ処理し、テーブル値をチェック
-- 値としてテーブルが見つかった場合、そのキー(インデックス)にディープクローンします
for key, value in original do
if type(value) == "table" then
clone[key] = deepClone(value)
end
end
-- ディープクローンされたテーブルの最終的なコピーを返します
return clone
end

関数が整ったら、次のようにディープコピーを作成できます:


local original = {
key = "value",
playerInfo = {
playerID = 505306092,
playerName = "PlayerName"
},
otherInfo = {
{
{1, 3, 5, 7, 9}
}
}
}
local clone = deepClone(original)

テーブルを凍結

テーブルを凍結すると、読み取り専用になり、変更したくない定数値を作成するのに役立ちます。凍結は永久的であり、「アンフリーズ」または「解凍」メソッドはありません。テーブルが凍結されているかどうかを確認するには、table.isfrozen()を使用します。

シャローフリーズ

ネストされたテーブルを含まずにテーブルを凍結するには、Luauはtable.freeze()メソッドを提供しています。


local target = {
key = "value",
engine = "Roblox",
playerID = 505306092
}
table.freeze(target)
target.playerID = 1 --> 読み取り専用テーブルを変更しようとしています

ディープフリーズ

ネストされたテーブルを含むより複雑なテーブルを凍結するには、次のような再帰関数を使用します:


local function deepFreeze(target)
-- テーブルをシャローフリーズします
table.freeze(target)
-- テーブルの各キーをチェックし、それがテーブルの場合はフリーズします
for _, value in target do
-- 値が凍結されていないことを確認します。すでに凍結されている場合、エラーが発生します
if type(value) == "table" and table.isfrozen(value) == false then
deepFreeze(value)
end
end
end

関数が整ったら、次のようにテーブルをディープフリーズできます:


local target = {
key = "value",
playerInfo = {
playerID = 505306092,
playerName = "PlayerName"
},
otherInfo = {
{
{1, 3, 5, 7, 9}
}
}
}
deepFreeze(target)
target.playerInfo.playerID = 1 --> 読み取り専用テーブルを変更しようとしています
©2026 Roblox Corporation。Roblox(ロブロックス)、RobloxロゴおよびPowering Imaginationは、米国並びにその他の国における登録商標および非登録商標です。