テーブル

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

テーブルデータ型は、nilでないタイプの値を複数含むことができます。nil、数値、2> 文字列2>、5> 関数5>、および他のテーブルを構築します。カーブルブレースで構築したテーブルを8>


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

テーブルを 配列 または 辞書 として使用できます。配列は索引の形式で数のリストを使用しますが、辞書は索引に数、文字列、オブジェクトを含むことができます。

For more information on built-in functions for working with tables, see the table library.

配列

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

配列を作成中

Luau テーブルを使用してマトリックスを作成するには、値をコマを区切って連続して宣言します。


-- 3つのアイテムでアレイを構築する
local testArray = {"A string", 3.14159, workspace.Camera}
print(testArray)

配列からの読み取り

配列から読み取るには、参照後にスクエアブラケットのペアを追加し、要素内のインデックス番号を指定します( [pos] ):


-- 3つのアイテムでアレイを構築する
local testArray = {"A string", 3.14159, workspace.Camera}
print(testArray[1]) -- 文字列
print(testArray[2]) -- 3.14159
print(testArray[3]) -- Camera

配列に書き込み

インデックスでアレイの値を定義または再書きするには、[index] の次に = と値を記述し、次の値を含みます:


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

配列をイテレートする

配列をイテレートするには、for ループを使用できます。配列に数値のインデックスがあるため、for ループを使用して、配列の長さを for から 2>for2> にすることもできます。5>for5> から、8>for8> までの長さを for1> することもで


local testArray = {"A string", 3.14159, workspace.Camera, "New string"}
-- 一般的なイテレーションを使用してループ
for index, value in testArray do
print(index, value)
end
-- 配列の長さオペレーターを使用してイテレート (#)
for index = 1, #testArray do
print(index, testArray[index])
end
-- [[ 結果出力:
1 A string
2 3.14159
3 Camera
4 New string
1 A string
2 3.14159
3 Camera
4 New string
]]

アイテムを挿入中

アレイの にアイテムを挿入するための 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]) -- 新し文字列ストリング
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

辞書

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

辞書を作成中

ディクションテーブルを作成するには、各 キー を定義し、=value を続けて、コマを使用して各キー-値ペアを分離します。コマを使用して、各キーの値をパーツで区分します:


local testDictionary = {
FruitName = "Lemon",
FruitColor = "Yellow",
Sour = true
}

辞書のキーは、数字、文字列、オブジェクトです。たとえば、キーは Instance であるかもしれません。オブジェクトをキーとして使用するには、正方形のブラックスクリプトでキーを宣言します ( [key] ):


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

辞書からの読み取り

辞書から読み取るには、参照後にブラックスペースを挿入し、キー名を指定します。引用を使用して直接ストリングキーを参照するか、変数値を使用します ( ["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 ループでグローバル pairs() 関数を返します。


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
]]

テーブルのクローン

ショールクローン

ルアウでは、ネストされていないテーブルをコピーするための 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()」のメソッドはありません。テーブルが凍結されているかどうかを確認するには、Library.table.isfrozen() を使用してください。

浅い凍結

ルアウでは、ネストされていないテーブルを凍結するための 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