Roblox(ロブロックス)のゲーム開発のスクリプト言語に使われているLuaスクリプトに関する解説です。
ここではLuaプログラミングの基本となる配列(table型)の基本や操作方法について説明しています。
配列(テーブル)の基本
Luaでは配列の代わりにtable型が使用されます。
table型には数値(number型)、ブール(boolean型)、文字列(string型)のほか、関数(function型)などの複数の値を格納することができます。
配列(テーブル)を作成する
table型は中カッコ{}
を使って指定します。
--空のテーブルを作る
local tbl = {}
配列に値を格納する
配列を作るには、table型に値をカンマ,
で区切って順番に格納します。
local myArray = {"ほげほげ", "FooBar", 256, workspace.Part}
配列から値を読み取る
配列から値を読み取るには角カッコにインデックス番号(添字)を指定して使用します。
local myArray = {"ほげほげ", "FooBar", 256, workspace.Part}
print(myArray[1]) --ほげほげ
print(myArray[3]) --256
配列に値を定義する(代入する/書き込む)
配列に値を代入するには、添え字を指定したテーブルに代入式=
を使います。
local myArray = {"ほげほげ", "FooBar", 256}
print(myArray[1]) --ほげほげ
myArray[1] = "ふがふが"
print(myArray[1]) --ふがふが
配列の操作
要素の追加や挿入
table[#table+1]構文を使用する
table[#table+1]
構文を使用することで、新しい値を配列に追加することができます。
local myArray = {"ほげほげ", "FooBar", 256}
myArray[#myArray + 1] = "ふがふが" --{"ほげほげ", "FooBar", 256, "ふがふが"}
print(myArray[4]) --ふがふが
table.insert()関数を使用する
table.insert()
関数を使用することで、新しい値を配列に追加することができます。また、第2引数にインデックス番号を指定することで、指定したインデックス番号の間に値を追加することができます。
local myArray = {"ほげほげ", "FooBar", 256}
table.insert(myArray, "ふがふが") --{"ほげほげ", "FooBar", 256, "ふがふが"}
print(myArray[4]) --ふがふが
table.insert(myArray, 2, "ぴよぴよ") --{"ほげほげ", "ぴよぴよ", "FooBar", 256, "ふがふが"}
print(myArray[2]) --ぴよぴよ
print(myArray[5]) --ふがふが
要素の削除
table.remove()関数を使用する
table.remove()
関数を使用することで、配列から値を削除することができます。この関数でアイテムを削除した場合、指定されたインデックス番号にある要素は削除され、それ以降の要素のインデックス番号が変更されます。
local myArray = {"ほげほげ", "ふがふが", "ぴよぴよ"}
table.remove(myArray, 2) --{"ほげほげ", "ぴよぴよ"}
print(myArray[2]) --ぴよぴよ
要素を取り出す
table.remove()関数を使用して要素を取り出す
table.remove()
関数は戻り値に取り出した値が帰るため、要素の削除と合わせて配列から指定したインデックス番号の値を取り出すことができます。
local myArray = {"ほげほげ", "ふがふが", "ぴよぴよ"}
removedValue = table.remove(myArray, 2)
print(myArray[2]) --ぴよぴよ
print(removedValue) --ふがふが
要素の並べ替え
table.sort()関数を使用する
table.sort()
関数を使用することで、配列の値を並び替えることができます。table.sort()
関数の第1引数に配列を指定することで標準の演算子である<
での比較ソートが行われるほか、第2引数に比較関数を入れることで、任意の計算式での並び替えを行うことが可能です。
標準でソートする場合
local myArray = {5, 256, 1, 89, 64}
table.sort(myArray) --{1, 5, 64, 89, 256}
比較関数を使用する場合
local myArray {
{text="ほげほげ", value="100"}
{text="ふがふが", value="1"}
{text="ぴよぴよ", value="20"}
}
table.sort(myArray,
function(a, b)
return (a.value < b.value) --valueの小さい順に並べ替える
end
)
--[[
{
{text="ふがふが", value="1"}
{text="ぴよぴよ", value="20"}
{text="ほげほげ", value="100"}
}
]]--
要素を検索する、見つける
table.find()関数を使う
table.find()
関数を使って配列から要素を見つけ出すことができます。第1引数に配列名、第2引数に検索する値を指定します。
table.find()
関数は要素が見つかった場合、インデックス番号を返します。
local myArray = {"ほげほげ", "ふがふが", "ぴよぴよ"}
table.find(myArray, "ふがふが") --2
また、要素が見つからなかった場合はnilを返します。
local myArray = {"ほげほげ", "ふがふが"}
table.find(myArray, "ぴよぴよ") --nil
また、table.find()
関数の第3引数は検索を開始するインデックス番号を指定することができます。
local myArray = {"ほげほげ", "ふがふが", "ぴよぴよ"}
table.find(myArray, "ほげほげ", 2) --nil(検索開始が2番目からのため "ほげほげ" は見つからない)
配列の要素数を取得する
table.maxn()関数を使う
table.maxn()
関数を使って、配列の要素の数を取得することができます。
local myArray = {"ほげほげ", "ふがふが", "ぴよぴよ"}
length = table.maxn(myArray)
print(length) --3
連想配列(ディクショナリー)
Luaではtable型を使って連想配列を扱うことができます。
連想配列を作成する
連想配列は「キー」と「値」で構成されます。連想配列に値を格納するには、それぞれのキーに代入式=
で値を指定します。またそれぞれのペアは通常の配列と同じくカンマ,
で区切ります。
local myDict = {
id = "hogehoge",
name = "Akira",
age = 12,
active = true,
}
連想配列から値を読み取る
連想配列から値を読み取るには、角カッコ[]
を使ってキー名を指定します。
local myDict = {
id = "hogehoge",
name = "Akira",
age = 12,
active = true,
}
print myDict["name"] --Akira
連想配列に値を格納する
連想配列に値を格納するには、角カッコ[]
を使ってキー名を指定し、代入式=
で値を指定します。
local myDict = {
id = "hogehoge",
name = "Akira",
age = 12,
active = true,
}
print myDict["name"] --Akira
myDict["name"] = "Sara" --既存の値の差し替え
myDict["age"] = 14 --既存の値の差し替え
myDict["country"] = "USA" --新しいキーと値を追加
--[[
{
id = "hogehoge",
name = "Sara",
age = 14,
active = true,
country = "USA"
}
--]]
連想配列の値(キーと値のペア)を削除する
連想配列のキーと値のペアを削除するには、その値にnil
を指定します。
local myDict = {
id = "hogehoge",
name = "Akira",
age = 12,
active = true,
}
myDict["age"] = nil --削除
--[[
{
id = "hogehoge",
name = "Akira",
active = true,
}
--]]