第1章 第4節 使って便利な配列型


← 前に戻る | 次に進む →

ここでは、C#の配列型を解説します。C#の配列型では、一次元・多次元配列を扱うことができ、多次元配列には、rectangular配列とjagged配列をサポートしています。

以下の例は、一次元配列の例です。

List 1.4 一次元配列の例

using System;

class Example
{
  static void Main() {
    int[] a = new int[5];
    for (int i = 0; i < 5; i++) a[i] = i;

    int[] b = new int[] { 10, 20, 30, 40, 50 };

    for (int i = 0; i < 5; i++)
      Console.WriteLine("a[{0}] = {1}", i, a[i]);
    for (int i = 0; i < 5; i++)
      Console.WriteLine("b[{0}] = {1}", i, b[i]);
  }
}


a[0] = 0
a[1] = 1
a[2] = 2
a[3] = 3
a[4] = 4
b[0] = 10
b[1] = 20
b[2] = 30
b[3] = 40
b[4] = 50

ここで示したように、一次元配列を扱うのは難しくありません。new int[5]のように直接その大きさを指定するか、new int[] {0, 1, 2, 3, 4}のように配列に入れる要素を指定することで自動的にその大きさの配列を作ることができます。

次に、多次元配列についての例を示します。

List 1.5 多次元配列の例

using System;

class Example
{
  static void Main() {
    int[,] a = new int[2, 3];   // rectangular配列.
    int[][] b = new int [2][];  // jagged配列.
    for (int i = 0; i < 2; i++) b[i] = new int[3];

    // 配列に値を代入.
    for (int i = 0; i < 2; i++) {
      for (int j = 0; j < 3; j++) {
        a[i, j] = i * j;
        b[i][j] = i + j;
      }
    }

    // 配列を表示.
    for (int i = 0; i < 2; i++)
      for (int j = 0; j < 3; j++)
        Console.WriteLine("a[{0}, {1}] = {2}", i, j, a[i, j]);
    for (int i = 0; i < 2; i++)
      for (int j = 0; j < 3; j++)
        Console.WriteLine("b[{0}][{1}] = {2}", i, j, b[i][j]);
  }
}


a[0, 0] = 0
a[0, 1] = 0
a[0, 2] = 0
a[1, 0] = 0
a[1, 1] = 1
a[1, 2] = 2
b[0][0] = 0
b[0][1] = 1
b[0][2] = 2
b[1][0] = 1
b[1][1] = 2
b[1][2] = 3

上記でも示していますが、多次元配列にはrectangular配列とjagged配列の二つがあります。

rectangular配列は、形で表すと「四角形」の配列だと言えるでしょう。二次元なら2*3や5*6、三次元なら2*3*4や5*6*7のような四角形や立方体の配列になります。上記に示した例では、int[,] a = new int[2, 3];で2*3の配列を宣言しています。

jagged配列は、形で表すと「ぎざぎざ」の配列だと言えるでしょう。例えば、二次元の配列なら、一次元の配列の配列ということになります。つまり、配列ごとに、配列があるわけで、配列ごとの大きさは任意の大きさにできます。上記に示した例では、int[][] b = new int[2][];で最初の配列を作成しており、配列を2の大きさで確保しています。次に、作成した2つの配列についての配列をb[i] = new int[3];のように各自その大きさを確保しているわけです。

C/C++の配列はjagged配列

C#の配列は、rectangular配列とjagged配列の二通りがありますが、C/C++では一つのみです。そして、それはjagged配列です。このように、C言語ではjagged配列しか持っていないので(正確にはちょっと違いますが、少なくとも記法の上ではそうです)、配列の扱い方にクセがあります。特に、関数の引数に配列を渡すときなどに注意が必要になるので、C言語を勉強し始めたばかりの方は、ここで躓くことが多いようです。その点、C#ではrectangular配列をサポートしているので、わかりやすいでしょう。

ここまでで、C#の配列型については理解できたことと思います。rectangluar配列とjagged配列を用途に合わせてうまく使えるようになりましょう。


← 前に戻る | 次に進む →


Copyright (C) Noriyuki Futatsugi/Foota Software, Japan.
All rights reserved.
d2VibWFzdGVyQGZ1dGF0c3VnaS5uZXQ=