前回はループ文ついて解説しました。今回は複数のデータを取り扱う方法について解説していきます。
この解説は↑の動画でも解説しています。イメージがかなりしづらいので、 今回の解説は動画の方がわかりやすいのでおすすめです。
この記事は本のように順を追って解説しています。この記事は途中のページになります。
この記事を見ていて、現在の状況がわからない場合や忘れてしまった事などが出てきたら↓のリンクから目次ページへ飛べますので立ち戻って見てください。
<配列とは>
プログラムを書いていて、時に変数をたくさん用意したい時という場面があると思います。
そういった場合、たくさん変数を定義してあげないといけないのですが、いちいち
int a = 1; int b = 2; int c = 3; //・・・(以下略)
と書いていては大変です。
そういった場合は配列というものを使うと便利です。
配列の便利さ
例えば3つの同じ種類の変数を用意したい場合は一々3つ宣言するのではなく
int[] a = new int[3];
↑のような感じで書くことができます。
これでint型のデータが3つあるという意味になります。
これの使い方は
型名[] 変数名 = new 型名[用意する数];
になります。
newは新しく作成するという意味です。
↑の状態ではデータを入れる箱を用意しただけですので中身を入れていきます。
int[] a = new int[3];
a[0] = 1;
a[1] = 2;
a[2] = 3;
と書きます。これで先ほどと同じように3つの箱に数字を入れることができました。
変数[何番目か] = 入れる値;
で箱の中に中身を入れる事ができます。ただし、この何番目かというのは1からではなく0から始まります。
↑の例では3つの箱を用意していますが、0,1,2で3つの箱になっています。そのため
a[3];
と書くと、3つしか箱用意してないのに4つ目やんけという事でエラーになります。
またいっぺんに入れることもできて、
int[] a = {1,2,3};
と入れても箱の中に値が入ります。
箱の箱・配列
変数をデータを入れる箱と例えるとすると、この
int[] a = new int[3];
のaは値ではなく箱の箱として扱われます。
なんかややこしいですが、「a[番号]」が箱であって、「a」は[番号]が入る箱なわけです。
このようなに配列とは箱の箱の事をいいます。
↑イメージとしてはこんな感じですね。データを入れる箱が指定した数あって、それらを取り扱える全体の箱が配列になります。
そのため
int a = new int[3]; a = 1;
みたいなのはエラーになります。aは値ではないからです。
ループ文を使用して便利に配列を使おう
さて、↑の例のように3つとかだったら、直接書くこともできますが、たくさんの数を使用したい場合、いちいち一個ずつ書いていったら大変です。
こういう時、ループ文を使用することで、配列をうまく使う事ができるようになります。
ループ文についてわからない、忘れてしまったなどあれば↓の記事を参考にしてください。
例えば、
int[] a = new int[50];
と定義したとします。50個も中身をいれるのは大変なので
for(int i = 0; i < a.Length; ++i) { a[i] = i; }
このように、ループ文を使えば、配列の中全てに値を入れる事ができます。今はiを直接入れていますが、使用するデータによって、iを様々なものに変えてもらえれば、色々なものを配列に入れられそうです。
ちなみに、このループで使っている、a.Lengthと言うのは配列の要素数を返してきます。↑の場合は50が返ってきています。
さて、では50って書けばいいんじゃないの?と思うかもしれませんが、配列をプログラムの色々なところで使っていて、後で配列の大きさを変更したくなった場合、50って書いてしまったところを全て修正しなくてはいけなくなるので、このように命令を使って値を取得した方が安全です。
プログラムを書くときは、なるべく数字直打ちを避けて、変更に強くなるようにしたいところです。
<多次元配列>
さて、ちょっと発展系になるのですが、箱をたくさん並べることもできます。
int[,,] a = new int[3,4,2];
↑のように書くと箱が3つの箱の中にさらに4つの箱があり、さらに2つの箱があるという意味になります。
たくさんあったので書ききれなかったですが、○が値入れる事ができる箱とすると↑のような形になります。
一番上の箱がaでその中に3つ箱があって、さらにその中に4つ箱があって、さらにその中に2つ箱があって、その中に値を入れる事ができるよう感じです。
このように、配列の[]の中に「,」を書く事で箱の中の箱の中の箱の中の・・・と続けることができます。「,」は複数書く事ができます。これを多次元配列といいます。
複数の分類分けをしているデータなどに使用すると便利です。
これをループ文で扱おうとすると↓のようになります。
int[,,] a = new int[3,4,2]; for(int i = 0; i < a.GetLength(0); ++i) { for(int j = 0; j < a.GetLength(1); ++j) { for(int k = 0; k < a.GetLength(2); ++k) { a[i,j,k] = i + j + k; } } }
配列.GetLength(知りたい番号)と書くと、その配列の知りたい場所の要素数を知ることができます。左から順に0から始まります。
多次元配列でLengthと書くと、全ての数が返ってきます。↑の場合は3×4×2で24が返ってきます。
そして、多重にループすることで、多次元配列の中を全て見ることができます。
<foreach文>
配列を使う時に、便利なループ文でforeach文というのがあります。
これは配列などの要素がたくさんある物を扱うのに便利です。とりあえずやってみましょう。
↑のように書くとコンソールには
と表示されます。
foreachは複数の要素を持つものを順番に取り出してくれるループ文です。
foreach(取り出したものを仮に入れるもの in 取り出し元)
{
}
と書きます。
↑の例では「配列a」の中から1個1個順番に要素を取り出して、仮の変数「i」に入れて使うみたいな感じになります。
これをfor文で書くと
int[] a = {1,2,3,4,5};
for(int i = 0; i < 5; ++i)
{
Debug.Log(a[i]);
}
となります。
↑の場合だと要素の数がわかっているのであんまりありがたみが薄いですが、要素の数がわかっていない時などは便利です。
ただし、whileやdo whileやforと違ってちょっと重いので、ものすごい数のループをさせる時はちょっと注意してください。
現段階では使いどころがあんまりないですが、後々便利に使える事があるので今は頭の片隅にでも置いておいてください。