Developer

【初心者Unity】繰り返し文をネストさせよう!
2021.09.01
Lv1

【初心者Unity】繰り返し文をネストさせよう!


はじめに

今回は前回までの配列やListの話に引き続き、繰り返し文をネストさせる方法とその用途についてご紹介します!


ネストとは?

ネストとは日本語で言うと入れ子構造のことです。ロシアの人形にマトリョーシカっていますよね?あれをイメージしていただけると分かりやすいかと思います。あれは人形の中に人形が入っていて、更にその中に人形が入っていて、、、というのを繰り返していますよね?あれと同様にfor文の中にfor文が入っているという状態が繰り返し文のネストです。具体的な例としては以下のスクリプトが挙げられます。

void Start()
{
     //外側のfor文
     for(int cnt1 = 1; cnt1 <= 2; cnt1++ )
     {
          //内側のfor文
          for(int cnt2 = 1; cnt2 <= 3; cnt2++)
          {
               Debug.Log("Hello World ");
	  }
     }
}

上の例ではコンソール上に「Hello World」が出力されますが重要なのはその回数です。皆さん予想してみてください。

。。。

予想できましたか?答えはそう6回です。下記解説となります。
まず、外側のfor文を確認すると処理を2回することが分かります。それでは何の処理をするのか見てみると、内側のfor文を処理するということが分かります。そこで内側のfor文を見てみると、処理を3回することが分かります。それでは何の処理をするのか見てみると、「Hello World」を出力するということが分かります。
つまり、内側のfor文によって「Hello World」が合計3回出力されます。そこで処理が終了するかと思いきや、ここで外側のfor文が動きます。外側のfor文は内側のfor文を2回動かすので、2回目の内側のfor文の処理として再び「Hello World」が3回出力されます。ここで内側のfor文の処理が終わると同時に、外側のfor文も、内側のfor文を2回動かしたので処理を終えます。
まとめると、(内側のfor文の処理回数) × (外側のfor文の処理回数) = (Hello Worldの出力数)となります。
今回でいうと3 × 2 = 6で6回出力されました。


実際に活用してみる

こんなん何に使うんじゃいと思う方もいらっしゃるかと思います。そこで実際の活用例をご覧いただきます。

○その1:九九表を作る

小学2年生の算数は一年を通してほぼすべての時間が九九に使われますね。小学2年生のご家族がいらっしゃる方はこちらのソースを活用して九九表を作ってあげましょう。

StringBuilder sb = new StringBuilder();
void Start()
     {
          //外側のfor文
          for(int num1 = 1; num1 <= 9; num1++ )
          {
               //内側のfor文
               for(int num2 = 1; num2 <= 9; num2++)
               {
                    sb.Append(num1 * num2 + " ");
               }
               Debug.Log(sb.ToString());
               sb.Clear();
          }
}

○その2:2次元配列やジャグ配列からデータを取り出す

こちらの方が幾分実用的かもしれません。2次元配列やジャグ配列からデータを取り出す際にも有用です。2次元配列もジャグ配列も、配列の中に配列が入っている状態。。。要するに配列一個一個を1データとした配列です。その中でも2次元配列は要素となる配列一個一個の要素数が等しいもの、ジャグ配列は要素となる配列一個一個の要素数が等しくないもののことを言います。
取り出し方としては、外側のfor文で一個一個の配列を取り出し、内側のfor文でその一個一個の配列からデータを取り出していきます。今回は「配列から全要素を取り出す」作業なので楽々なforeachを使ってしまいましょう。

StringBuilder sb = new StringBuilder();
//ジャグ配列の定義&初期化
int[][] nums_array = {
                     new int[] {1, 2, 3},
                     new int[] {4, 5},
                     new int[] {6, 7, 8, 9}
                     };
void Start()
{
     //外側のforeach文
     foreach(int[] nums in nums_array)
     {
          //内側のforeach文
          foreach(int num in nums)
          {
               sb.Append(num+ " ");
          }
          Debug.Log(sb.ToString());
          sb.Clear();
     }
}

おわりに

みなさんいかがでしたでしょうか。繰り返し文のネストはご理解いただけましたでしょうか?また、実際に活用する方法もイメージできましたでしょうか?(笑)
今回のサンプルソースもぜひ参考にしていただき、今後のプログラミングライフを快適にしていただければと思います!

 

Unity実践編 - 目次リンク

実践Unityゲームプログラミング 連載目次