ジャグ配列と四角形配列

プログラミングC# 第6版 7.1.4


多次元配列は二種類の定義方法があります。

まずはジャグ配列(配列の配列)と言って配列の要素の配列を任意の数の配列で定義することができます。

以下、動作確認です。

using System;

class Program {
    static void Main () {
        int[][] num_list = new int[][] {
            // 各要素の配列が全部要素数が違う
            new int[] {1,2,3},
            new int[] {4,5},
            new int[] {7},
        };
        
        foreach(int[] nums in num_list) {
            foreach(int num in nums) {
                Console.Write(num+" ");
            }
            Console.WriteLine("");
        }
    }
}
$ main
1 2 3
4 5
7

もうひとつが四角形配列と呼ばれるものです。こちらは各要素数が固定の配列になります。

宣言方法もジャグ配列とは違うので注意が必要ですね。

以下、動作確認です。

using System;

class Program {
    static void Main () {
        int[,] num_list = new int[,] {
            {1,2,3},
            {4,5,6},
            {7,8,9},
        };
        
        foreach(int num in num_list) {
            Console.Write(num+" ");
        }
    }
}
$ main
1 2 3 4 5 6 7 8 9

四角形配列の場合、ひとつの配列のように扱われるのでforeachだと少し不便です。ジャグ配列の例のように一行ずつ処理をさせたい場合はforを使った方が良いようです。

using System;

class Program {
    static void Main () {
        int[,] num_list = new int[,] {
            {1,2,3},
            {4,5,6},
            {7,8,9},
            {0,1,2},
        };
        
        for(int i=0,size_i=num_list.GetLength(0); i<size_i; i++) {
            for(int j=0,size_j=num_list.GetLength(1); j<size_j; j++) {
                Console.Write(num_list[i,j]+" ");
            }
            Console.WriteLine("");
        }
    }
}
$ main
1 2 3
4 5 6
7 8 9
0 1 2

しかしこれはこれでちょっと面倒ですね。結局のところ、各要素に処理を加えるだけなら素直にforeachを使った方が1ループで済むのでその方が良さそうですね。