こんにちは、ロブスタのハルです!
前回の講座ではfor文についての演習をしました。
今回はテーブルについて解説します。
前回の講座を見ていない方はこちらからご覧ください。
テーブルについて
テーブルとは複数の値をまとめるための方法です。変数は1つの変数に対して1つの値を保管しますが、テーブルは1つのテーブルに対して複数の値を保管します。しかも、型が違っていても大丈夫です。
Lua言語のテーブルは配列と連想配列という2つの要素を足し合わせたものとなっています。
配列について
配列とは順番ありで複数の値を保管するための方法です。具体的には以下のように書きます。
local array = {1, 2, 3, 4, 5}
local fruits = {"apple", "grape", "strawberry"}
local mixedArray = {"book", 600, "paper", 100}
arrayとは日本語で配列という意味です。arrayで一つの変数となっていますが、その中身は1, 2, 3, 4, 5と5つの数値が入っています。また、数値型以外にもfruitsでは文字列型のapple, grape, strawberryが保管されています。さらにmixedArrayの中身は文字列型と数値型が混ざって保管されています。
ここまでは配列の中身を設定するだけでした。ここからは実際に配列の中身を取り出してみたいと思います。
local array = {1, 2, 3, 4, 5}
local fruits = {"apple", "grape", "strawberry"}
local mixedArray = {"book", 600, "paper", 100}
print(array[1]) -- 1
print(array[2]) -- 2
print(fruits[3]) -- strawberry
print(mixedArray[2]) -- 600
配列は上の画像のようなイメージで、横に並んでいるロッカーを想像してください。そのロッカーの左端から順番に1、2、3、…と番号(インデックス)が振られています。そのため配列名[インデックス]と書くことでそのロッカーの中身を取り出すことができるのです。
すでに他のプログラミング言語を勉強したことがある人は配列のインデックスは0から始まると学んだかと思います。しかし、Lua言語ではインデックスは1から始まるので注意しましょう。
まとめると次のようになります。
-- 配列の初期設定
local 配列名 = {中身1, 中身2, 中身3}
-- 配列の中身を取り出す
配列名[インデックス]
連想配列(辞書)について
連想配列は順番なしで複数の値を保管する方法です。具体的には以下のように書きます。
local person = {
name = "Tarou",
age = 150,
height = 170,
weight = 70
}
personという連想配列に対してname, age, height, weightという4つの文字列が設定されています。さらにそれぞれの文字列に値が代入されています。配列との違いとして値自体を保管しているか文字列と値のセットを保管しているかが挙げられます。
連想配列において文字列をキー、値をバリューと呼びます。上の例だとname, age, height, weightがキーになり、”Tarou”, 150, 170, 70がバリューになります。また、キーとバリューは1対1で対応しています。
連想配列のバリューを取り出すには次のようになります。
local person = {
name = "Tarou",
age = 150,
height = 170,
weight = 70
}
print(person.name) -- Tarou
print(person.age) -- 150
print(person["height"]) -- 170
連想配列.キーまたは連想配列[“キー”]でバリューを取り出すことができます。
連想配列が順番なしなのはキーとバリューが1対1で対応しており、キーさえわかればその中身を取り出してこれるためです。
まとめると次のようになります。
-- 連想配列の初期設定
local 連想配列名 = {
キー1 = バリュー1,
キー2 = バリュー2
}
-- 連想配列の中身を取り出す
連想配列名.キー
連想配列名["キー"]
ドット記法とブラケット記法
連想配列でバリューを取り出す方法には2種類あると説明しました。
連想配列名.キーの方法をドット記法、連想配列名[“キー”]の方法をブラケット記法と呼びます。
ドット記法について
メリット
- ドット記法のメリットは簡潔で読みやすい
- こちらの方法で書かれることが多い
デメリット
- キー名には変数やキーワードが使えない
- キー名にはスペースや特殊文字(@、\、+、-など)
- キー名の先頭は数字から始まってはいけない
ブラケット記法について
メリット
- キー名にスペースや特殊文字が含まれていても大丈夫
- キー名の先頭が数字でも大丈夫
- キー名が変数でも大丈夫
デメリット
- 別の言語(JavaScript)だと若干プログラムの実行速度が遅くなる場合がある(Lua言語では不明)
ひとまずはドット記法を使っておいて特殊なキーを使いたい場合はブラケット記法を使うという方針で大丈夫かと思います。
テーブル(ぱーと2)
さて、配列と連想配列についてなんとなく理解できたでしょうか?
冒頭で書いたようにテーブルとは配列+連想配列です。つまり、以下のような書き方をすることができるのです。
local table = {
"apple",
"banana",
name = "Jirou",
age = 200
}
print(table[2]) -- banana
print(table.name) -- Jirou
print(table["age"]) -- 200
print(table[4]) -- nil (取り出せない)
tableの要素の前2つは配列、後ろ2は連想配列となっています。しかし、tableの中身を取り出す方法はそれぞれにあったものを使わないとnilという値が返ってきてきちんと取り出せなくなってしまいます。だからテーブルという概念だけを勉強するのではなく配列と連想配列についても知っておく必要があっらんですね。
まとめ
- テーブルは配列+連想配列
- 配列は順番ありで複数の値を保管する方法
- 連想配列は順番なしで複数の値を保管する方法
- 配列の中身は配列名[インデックス]で取り出す
- 連想配列の中身は連想配列名.キーまたは連想配列名[“キー”]で取り出す
- テーブルの中身によって配列か連想配列どちらかの取り出し方を使う
お疲れ様でした。今回は値の保管方法であるテーブルについて解説しました。テーブルにはまだまだ機能があるのですがそれは後々解説したいと思います。
次回は実際にテーブルを使った演習を行います。
コメント