[C#入門]第6回 配列変数(2)

はじめに

前回は、配列変数(特に1次元配列)について学びました。

今回は、多次元配列について学びます。

目次

多次元配列とは

前回、1次元配列は、1つの箱の中に「しきり」を付けて複数のデータをいれられる変数であることを説明しました。

1次元以上の配列(つまり2次元や3次元といった配列)は、多次元配列と呼びます。

例えば、2次元配列は、1つの箱に縦と横の「しきり」を付けたイメージです。学校にある下駄箱のような感じです。

3次元配列は、その下駄箱が複数集まったイメージです。2次元配列が1クラス分だとすると、複数のクラス分の下駄箱が3次元配列ということになります。

※4次元以上の配列も作成することができますが、コードで書くと可読性が悪く現実的ではありません。使用したとしても3次元配列までにとどめておくのが一般的です。

 

多次元配列の宣言

多次元配列の宣言書式を以下に示します。

C#における多次元配列の宣言
データ型[,] 変数名 = new データ型[要素数, 要素数];  // 2次元配列
データ型[,,] 変数名 = new データ型[要素数, 要素数, 要素数];  // 3次元配列
VBにおける多次元配列の宣言
Dim 変数名(要素数 - 1, 要素数 - 1) As データ型  '2次元配列の宣言
Dim 変数名(要素数 - 1, 要素数 - 1, 要素数 - 1) As データ型  '3次元配列の宣言
Javaにおける多次元配列の宣言
データ型[][] 変数名 = new データ型[要素数][要素数];  // 2次元配列
データ型[][][] 変数名 = new データ型[要素数][要素数][要素数];  // 3次元配列
※Swiftについては多次元配列の初期化で説明します

多次元配列の宣言と値の代入例

多次元配列の宣言方法がわかりましたので、実際の使用方法をみていきましょう。

以下は、2次元配列と3次元配列の宣言と値を代入する例です。

C#における2次元配列と3次元配列の使用例
// 2次元配列の宣言
int[,] data2d = new int[2, 3];

// 2次元配列へのデータの代入
data2d[0, 0] = 1;
data2d[0, 1] = 2;
data2d[0, 2] = 3;
data2d[1, 0] = 4;
data2d[1, 1] = 5;
data2d[1, 2] = 6;


// 3次元配列の宣言
int[,,] data3d = new int[3, 2, 3];

// 3次元配列へのデータの代入
data3d[0, 0, 0] = 1;
data3d[0, 0, 1] = 2;
data3d[0, 0, 2] = 3;
data3d[0, 1, 0] = 4;
data3d[0, 1, 1] = 5;
data3d[0, 1, 2] = 6;
data3d[1, 0, 0] = 7;
data3d[1, 0, 1] = 8;
data3d[1, 0, 2] = 9;
data3d[1, 1, 0] = 10;
data3d[1, 1, 1] = 11;
data3d[1, 1, 2] = 12;
data3d[2, 0, 0] = 13;
data3d[2, 0, 1] = 14;
data3d[2, 0, 2] = 15;
data3d[2, 1, 0] = 16;
data3d[2, 1, 1] = 17;
data3d[2, 1, 2] = 18;

上記コードをイメージで表すと下図のようになります。

その他の言語のコード例を以下に示します。

VB.NETにおける2次元配列と3次元配列の使用例
'2次元配列の宣言
Dim data2d(1, 2) As Integer

'2次元配列へのデータの代入
data2d(0, 0) = 1
data2d(0, 1) = 2
data2d(0, 2) = 3
data2d(1, 0) = 4
data2d(1, 1) = 5
data2d(1, 2) = 6

'3次元配列の宣言
Dim data3d(2, 1, 2) As Integer

'3次元配列へのデータの代入
data3d(0, 0, 0) = 1
data3d(0, 0, 1) = 2
data3d(0, 0, 2) = 3
data3d(0, 1, 0) = 4
data3d(0, 1, 1) = 5
data3d(0, 1, 2) = 6
data3d(1, 0, 0) = 7
data3d(1, 0, 1) = 8
data3d(1, 0, 2) = 9
data3d(1, 1, 0) = 10
data3d(1, 1, 1) = 11
data3d(1, 1, 2) = 12
data3d(2, 0, 0) = 13
data3d(2, 0, 1) = 14
data3d(2, 0, 2) = 15
data3d(2, 1, 0) = 16
data3d(2, 1, 1) = 17
data3d(2, 1, 2) = 18
Javaにおける2次元配列と3次元配列の使用例
// 2次元配列の宣言
int[][] data2d = new int[2][3];

// 2次元配列へのデータの代入
data2d[0][0] = 1;
data2d[0][1] = 2;
data2d[0][2] = 3;
data2d[1][0] = 4;
data2d[1][1] = 5;
data2d[1][2] = 6;

// 3次元配列の宣言
int[][][] data3d = new int[3][2][3];

// 3次元配列へのデータの代入
data3d[0][0][0] = 1;
data3d[0][0][1] = 2;
data3d[0][0][2] = 3;
data3d[0][1][0] = 4;
data3d[0][1][1] = 5;
data3d[0][1][2] = 6;
data3d[1][0][0] = 7;
data3d[1][0][1] = 8;
data3d[1][0][2] = 9;
data3d[1][1][0] = 10;
data3d[1][1][1] = 11;
data3d[1][1][2] = 12;
data3d[2][0][0] = 13;
data3d[2][0][1] = 14;
data3d[2][0][2] = 15;
data3d[2][1][0] = 16;
data3d[2][1][1] = 17;
data3d[2][1][2] = 18;

多次元配列の初期化

先ほどの例では、1.多次元配列を宣言、2.値を代入する、という手順でした。

多次元配列は、他の変数同様に、宣言と初期化を同時に行うことができます。先ほどのコードを、初期化で行う例を示します。

C#における多次元配列の初期化
// 2次元配列の初期化
int[,] data2d = {
    {1, 2, 3},
    {4, 5, 6}
};

// 3次元配列の初期化
int[,,] data3d = {
    {
        {1, 2, 3},
        {4, 5, 6}
    },
    {
        {7, 8, 9},
        {10, 11, 12}
    },
    {
        {13, 14, 15},
        {16, 17, 18}
    }
};
VB.NETにおける多次元配列の初期化
'2次元配列の初期化
Dim data2d(,) As Integer = {
    {1, 2, 3},
    {4, 5, 6}
}

'3次元配列の初期化
Dim data3d(,,) As Integer = {
    {
        {1, 2, 3},
        {4, 5, 6}
    },
    {
        {7, 8, 9},
        {10, 11, 12}
    },
    {
        {13, 14, 15},
        {16, 17, 18}
    }
}
Javaにおける多次元配列の初期化
// 2次元配列の初期化
int[][] data2d = {
    {1, 2, 3},
    {4, 5, 6}
};

// 3次元配列の初期化
int[][][] data3d = {
    {
        {1, 2, 3},
        {4, 5, 6}
    },
    {
        {7, 8, 9},
        {10, 11, 12}
    },
    {
        {13, 14, 15},
        {16, 17, 18}
    }
};
Swiftにおける多次元配列の初期化
let data2d:[[Int]] = [
    [1, 2, 3],
    [4, 5, 6]
]

let data3d:[[[Int]]] = [
    [
        [1, 2, 3],
        [4, 5, 6]
    ],
    [
        [7, 8, 9],
        [10, 11, 12]
    ],
    [
        [13, 14, 15],
        [16, 17, 18]
    ]
]

型推論による多次元配列の初期化

最後に型推論による多次元配列の初期化方法を確認しましょう。

以下にコード例を示します。

C#における型推論による多次元配列の初期化
// 型推論による2次元配列の初期化
var data2d = new [,]{
    {1, 2, 3},
    {4, 5, 6}
};

// 型推論による3次元配列の初期化
var data3d = new [,,]{
    {
        {1, 2, 3},
        {4, 5, 6}
    },
    {
        {7, 8, 9},
        {10, 11, 12}
    },
    {
        {13, 14, 15},
        {16, 17, 18}
    }
};
VB.NETにおける型推論による多次元配列の初期化
' 型推論による2次元配列の初期化
Dim data2d(,) = {
    {1, 2, 3},
    {4, 5, 6}
}

' 型推論による3次元配列の初期化
Dim data3d(,,) = {
    {
        {1, 2, 3},
        {4, 5, 6}
    },
    {
        {7, 8, 9},
        {10, 11, 12}
    },
    {
        {13, 14, 15},
        {16, 17, 18}
    }
}
Javaにおける型推論による多次元配列の初期化

※Javaは、型推論を使用して多次元配列の初期化を行えません

Swiftにおける型推論による多次元配列の初期化
// 型推論による2次元配列の初期化
let data2d = [
    [1, 2, 3],
    [4, 5, 6]
]

// 型推論による3次元配列の初期化
let data3d = [
    [
        [1, 2, 3],
        [4, 5, 6]
    ],
    [
        [7, 8, 9],
        [10, 11, 12]
    ],
    [
        [13, 14, 15],
        [16, 17, 18]
    ]
]

まとめ

多次元配列の宣言方法は、言語ごとに特徴があります。宣言または初期化をしてしまえば、使用方法をほぼ変わりませんので、これを機会にマスターしてしまいましょう。

次回予定

次回はnull許容型について説明をします。



コメントを残す

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

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください