講義メモ 続き

補足:2次元配列

・C#の2次元配列はC/C++とは異なり、2つの添字を「配列名[添字①, 添字②]」の形式で指定する
 ※ 後述するが、C/C++と同様に「配列名[添字①][添字②]」の形式で指定する別形式もある
・宣言の書式: 型[,] 配列名;
・生成の書式: 配列名 = new 型[要素数①, 要素数②];
・同時にして、 型[,] 配列名 = new 型[要素数①, 要素数②]; としても良い
例: 縦3列横4列のダンジョンのモンスター配置数 int[,] monsters = new int[3,4];
・2次元配列も添字は0からなので、要素は[0. 0]から[要素数①-1, 要素数②-1]まで。
・2次元配列の全要素を扱うには、forの2重ループを用いると良い
 for (int i = 0; i < 3; i++) {
  for (int j = 0; j < 4; j++) {
   Debug.Log(monsters[i][j]);
  }
 }
・2次元配列も初期化が可能で、{}を2重に用いる
・例: int[,] monsters = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};

ミニ演習 mini128

・上記の例を試そう
・2次元配列monstersを初期化し、全データを表示し、配置数の合計も表示しよう

作成例

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class mini128 : MonoBehaviour {
    void Start() {
        //2次元配列の初期化
        int[,] monsters = { { 1, 2, 3, 4 }, { 5, 6, 7, 8 }, { 9, 10, 11, 12 } };
        int sum = 0; //合計用
        for (int i = 0; i < 3; i++) { //変数iを用いて繰返す
            for (int j = 0; j < 4; j++) { //変数jを用いて繰返す
                Debug.Log("monsters[" + i + "," + j + "] = " + monsters[i, j]);
                sum += monsters[i, j]; //合計に足し込む
            }
        }
        Debug.Log("配置数合計=" + sum);
    }
    void Update() {

    }
}

ミニ演習 mini128a

・2次元配列monstersの[0,0]から[0,3]までを0階、[1,0]から[1,3]までを1階、[2,0]から[2,3]までを2階とみなし、
 階ごとの配置数と合計を表示しよう
実行結果
0階配置数=10
1階配置数=26
2階配置数=42
合計=78

作成例

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class mini128a : MonoBehaviour {
    void Start() {
        //2次元配列の初期化
        int[,] monsters = { { 1, 2, 3, 4 }, { 5, 6, 7, 8 }, { 9, 10, 11, 12 } };
        int all = 0, sum = 0; //合計用(全、階ごと)
        for (int i = 0; i < 3; i++) { //変数iを用いて繰返す
            for (int j = 0; j < 4; j++) { //変数jを用いて繰返す
                sum += monsters[i, j]; //階ごと合計に足し込む
            }
            Debug.Log(i + "階配置数=" + sum);
            all += sum; //全合計に足し込む
            sum = 0; //階ごと合計をクリア
        }
        Debug.Log("合計=" + all);
    }
    void Update() {

    }
}

補足:ジャグ配列

・C/C++と同様に「配列名[添字①][添字②]」の形式で指定する別形式の多次元配列
・処理効率は下がるが、要素数がそろっていない場合にも対応できる
例: a[0][0]←1, a[0][1]←2, a[1][0]←3, a[2][0]←4, a[2][1]←5, a[2][2]←6
・内部構造は「配列の配列」であり、上の例は内部的にはa[0]{1,2}、a[1]{3}、a[2]{4,5,6}とみなされる
・配列数は配列名.Lengthで、内側の配列の要素数は配列名[添字].Lengthで得られる
・宣言の書式: 型[][] 配列名;
・生成の書式: 配列名 = new 型[要素数①][]; 配列名[添字] = new 型[要素数②];…
・例: int[][] monsters = new int[3][]; 
    monsters[0] = new int[2]; monsters[1] = new int[1]; monsters[2] = new int[3];
・初期化は通常の配列と同様
 例: int[][] monsters = new int[3][]; 
    monsters[0] = new int[]{1, 2}; monsters[1] = new int[]{3}; monsters[2] = new int[]{4, 5, 6};

ミニ演習 mini128b

・上記の例を試そう
・2次元のジャグ配列monstersを初期化し、全データを表示し、配置数の合計も表示しよう

作成例

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class mini128b : MonoBehaviour {
    void Start() {
        //2次元ジャグ配列の初期化
        int[][] monsters = new int[3][];
        monsters[0] = new int[]{1, 2}; monsters[1] = new int[]{3}; monsters[2] = new int[]{4, 5, 6};
        int sum = 0; //合計用
        for (int i = 0; i < monsters.Length; i++) { //変数iを用いて内側の全配列分繰返す
            for (int j = 0; j < monsters[i].Length; j++) { //変数jを用いて内側の全要素分繰返す
                Debug.Log("monsters[" + i + "," + j + "] = " + monsters[i][j]);
                sum += monsters[i][j]; //合計に足し込む
            }
        }
        Debug.Log("配置数合計=" + sum);
    }
    void Update() {

    }
}

ミニ演習 mini128c

・2次元ジャグ配列monstersの[0]を0階、[1]を1階、[2]を2階とみなし、階ごとの配置数と合計を表示しよう
実行結果
0階配置数=3
1階配置数=3
2階配置数=15
合計=21

作成例

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class mini128c : MonoBehaviour {
    void Start() {
        //2次元ジャグ配列の初期化
        int[][] monsters = new int[3][];
        monsters[0] = new int[] { 1, 2 }; monsters[1] = new int[] { 3 }; monsters[2] = new int[] { 4, 5, 6 };
        int all = 0, sum = 0; //合計用(全、階ごと)
        for (int i = 0; i < monsters.Length; i++) { //変数iを用いて内側の全配列分繰返す
            for (int j = 0; j < monsters[i].Length; j++) { //変数jを用いて内側の全要素分繰返す
                sum += monsters[i][j]; //合計に足し込む
            }
            Debug.Log(i + "階配置数=" + sum);
            all += sum; //全合計に足し込む
            sum = 0; //階ごと合計をクリア
        }
        Debug.Log("合計=" + all);
    }
    void Update() {

    }
}

補足:パブリック配列

・Unity環境では、パブリック変数と同様に、配列をpublic指定で定義できる
・すると、要素数の分だけ、入力領域が用意される
 例: public int[] monsters = new int[3];
・定義と生成までを行うこと

ミニ演習 mini128d

・3要素のint型パブリック配列monstersを宣言・生成する
・Unity側で適当な値を入力すると、平均値を実数で表示しよう

提出:ミニ演習 mini128d

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です