テーブル

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

テーブル データタイプは、nilブール値数値文字列関数、その他のテーブルなど、任意のタイプの複数の値を保存できます。カーリーブレースでテーブルを構成する ( {} ):


-- 変数「t」に割り当てられた空のテーブルを作成
local t = {}
print(t) -- {}

テーブルを 配列 または 辞書 として使用できます。配列はインデックスとして数列の順序付けられたリストを使用しますが、辞書には数、文字列、オブジェクトがインデックスとして含まれる可能性があります。

テーブルを操作するための内蔵機能に関する詳細は、table ライブラリを参照してください。

配列

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

配列を作成する

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


-- 3つのアイテムで構成される配列を作成
local testArray = {"A string", 3.14159, true}
print(testArray)

配列から読み込む

配列から読み込むには、リファレンスの後にスクエアブレックのペアを追加し、内部の要素のインデックス番号を指定します ([pos]):


-- 3つのアイテムで構成される配列を作成
local testArray = {"A string", 3.14159, true}
print(testArray[1]) -- 文字列
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 ループを使用できます。配列に数字インデックスがあるため、 から配列の長さまで数字ループを使用できます ( )。


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つの組み込み方法があります:

  • アレイとアイテムの値の参照を Luau's 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]) -- 新しい文字列
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]) -- 最初のアイテム
print(testArray[2]) -- 新アイテム #2
print(testArray[3]) -- Next item

アイテムを削除

配列からアイテムを削除するには、table.remove() を使用します。これにより、指定された位置のアイテムが削除され、次のアイテムはすべてインデックスポジションを 1 戻します。


local testArray = {"First item", "Next item", "Last item"}
table.remove(testArray, 2)
print(testArray[1]) -- 最初のアイテム
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] ) を使用します。


local part = Instance.new("Part")
local testDictionary = {
partType = "Block",
[part] = true
}
-- ストリングキーの引用を含む
print(testDictionary["partType"]) -- ブロック
-- 非ストリングキーのための引用を省略する
print(testDictionary[part]) -- true

辞書に書き込む

新しいまたは既存の辞書キーの値を定義または書き換えるには、キー名を括弧 ( [key] ) で宣言し、その後 = と値を指定します:


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

辞書を反復する

辞書を反復するには、pairs() ループでグローバルな for 機能を使用してください:


local testDictionary = {
fruitName = "Lemon",
fruitColor = "Yellow",
sour = true
}
for key, value in pairs(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 pairs(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 deepCopy(original)
-- コピーの新しいテーブルを定義する
local copy = {}
-- 原始のテーブルをループしてクローンする
for key, value in original do
-- 値の種類がテーブルの場合、キー (インデックス) に深くコピーする
-- そうでない場合 (または) タイプがテーブルではないので、デフォルト値をインデックスに割り当てる
copy[key] = type(value) == "table" and deepCopy(value) or value
end
-- 深くクローンされたテーブルの最終的なコピーを返す
return copy
end

機能がプレースかれているので、以下のように深いコピーを作成できます:


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

フリーズテーブル

テーブルを凍結すると、読み込み専用になり、変更したくない定期的な値を作成するのに便利です。凍結は永久であり、「解凍」または「解氷」方法はありません。テーブルが凍結されているかどうかをチェックするには、table.isfrozen() を使用します。

浅い凍結

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


local target = {
key = "value",
engine = "Roblox",
playerID = 505306092
}
table.freeze(target)
target.playerID = 1 --> attempt to modify a readonly table

深い凍結

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


local function deepFreeze(target)
-- テーブルを浅く凍結する
table.freeze(target)
-- テーブルの各キーをチェックし、それがテーブルである場合は凍結する
for _, v in target do
if type(v) == "table" then
deepFreeze(v)
end
end
end

機能がプレースかれているため、次のようにテーブルを深凍結できます:


local target = {
key = "value",
playerInfo = {
playerID = 505306092,
playerName = "PlayerName"
},
otherInfo = {
{
{1, 3, 5, 7, 9}
}
}
}
deepFreeze(target)
target.playerInfo.playerID = 1 --> attempt to modify a readonly table