配列 -配列-

ホームC#プログラミング応用講義 > 配列

目次

1次元配列

配列は応用的であるため、入門講座は申し訳程度しか扱っていません。この講義では配列を完璧にマスターできるように しましょう。

まず配列の中で1番使われるのが「1次元配列」です。これがいわゆる普通の配列で、ほとんどの配列は1次元配列です。
この宣言、利用方法は入門講座でやっていますがおさらいしておきます。

型[ ] 配列名 = new 型[要素数];
([ と ] の間にスペースを入れているのは [] のようにつながることを防ぐためで、実際はスペースがあってはいけません)
ここで C/C++ ユーザに気をつけていただきたいのは配列名の後ではなく、型名の直後に [ ] をつけることです。
int[] x = new int[30];
// ------------------
int[] x;
x = new int[30];
区切りコメントの上も下も同じ意味を成します。int 型の配列を要素数30で用意しています。
using System;

class Sample
{
public static void Main(string[] args)
{
int[] x = new int[30];

for (int i=0;i<30;i++)
x[i] = i;

for (int i=0;i<30;i++)
Console.WriteLine("これは{0}番目のループです",i+1);
}
}
ここでの配列は
[0] : 0
[1] : 1
[2] : 2
という形で順に初期化したいため、for で繰り返しています。

また、Console.WriteLine() メソッドのフォーマットに関して説明しま す。このサンプルの WriteLine() の部分は
Console.WriteLine("これは" + (i+1) + "番目のループです");
と書くこともできますが、ここではフォーマットを利用しています。フォーマットは double 型の数の小数点第何位まで表示するかなどを指定する際にも利用しますので、詳しくは SDK サンプルをご覧ください。

文字列の中に {x} のようなフォーマットを入れると、文字列を除いて数えた x 番目の引数の値が参照されます。ここでは 0 が入っていますので、文字列を除いた0番目の引数、すなわち「i+1」が参照され、
これは1番目のループです
これは2番目のループです
これは3番目のループです
これは4番目のループです
と表示されます。もちろん i+1 をしなければ配列のインデックスは0から始まりますので、
これは0番目のループです
これは1番目のループです
これは2番目のループです
これは3番目のループです
となります。

また、配列に用意された Length プロパティは便利です。

(( Length プロパティ ))
配列の要素数を表すプロパティ。このプロパティを上のサンプルの for の i<30 を、i<x.Length のように利用することで、より汎用的になります。
もし i<30 なら配列の要素数を変更した際、同時にこの部分も変えなくてはなりませんが、Length を利用するとその手間が省けます。

さらに C# においては string 型も char 型の配列(char[ ])として扱うことができます。
using System;

class Sample
{
public static void Main(string[] args)
{
string str = "Hello, Mr.Dokugaku!!";

Console.WriteLine(str[1]);
}
}
このプログラムは
e
と表示されます。

多次元配列

多次元配列とは長方形のようにしてデータを収める配列です。1次元配列は直線のように表されますが、2次元配列にな ると長方形になります。

型[ , ] 配列名 = new 型[ 行(縦)の要素数, 列(横)の要素数];
これが2次元配列の宣言方法です。それ以上になっても [ と ] の間のコンマを増やすことで宣言できます。
using System;

class Sample
{
public static void Main(string[] args)
{
int[,] x2 = {
{1,2,3},
{4,5,6}
};
for (int t=0;t<2;t++)
for (int y=0;y<3;y++) Console.WriteLine(x2[t,y]);
}
}
ここでは宣言とともに初期化を行っています。
この x2 という配列のイメージ図は以下のテーブルのようになります。

1
2
3
4
5
6

見やすく、わかりやすいように初期化するのがいいでしょう。

これは2次元配列ですから、 for による繰り返しを2つ重ねていることを確認してください。
このプログラムは
1
2
3
4
5
6
と表示されます。

ジャグ配列

ジャグ配列は「ぎざぎざ配列」と簡単に説明できますが、実際その利用は非常に難しく、理想されること も非常にまれで す。私はこれまでジャグ配列が利用されたものを見たことがありません。しかしここでは簡単に使えるようにしておきましょう。

2次元配列は長方形のようにすることができますが、ジャグ配列は階段のようにぎざぎざにすることができます。ほしい部分だけ配列の枠を作ることができるの です。
これは「配列の配列」と捉えることができ、[ ] をつなげて宣言する形式になります。

型 [ ] [ ] 配列名 = new 型 [ 要素数 ] [ ];
最後の [ ] は要素数を指定しません。この部分は個々で指定する形になります。
using System;

class Sample
{
public static void Main(string[] args)
{
int[][] x3 = new int[2][];
x3[0] = {1,2};
x3[1] = {3,4,5};

for (int i=0;i<x3.Length;i++)
for (int j=0;j<x3[i].Length;j++)System.Console.WriteLine(x3[i][j]);
}
}
ジャグ配列は多次元配列と比較して多段階配列と考えるとわかりやすいかもしれません。
多次元というのは2次元が平面(長方形)、3次元が立体(直方体)と軸が増えていくようになりますが、多段階配列は階段の段が増えていきます。
x3[0][0]
x3[0][1]
x3[1][0]
x3[1][1]
x3[1][2]
この階段の段は何段ですか? 2段ですね。その「2」がプログラム上で書かれているのが段を表す部分です。

そして、0段目・1段目それぞれに1次元配列を入れることで段を生み出すことができます。ここでは
0段目 : 2個
1段目 : 3個
の要素を入れているため、上のようなテーブルの構造になります。

繰り返しの部分を見るとジャグ配列と多段階配列が似ていることに気づくかもしれません。
実際似ていますが似ているがゆえにそれぞれの宣言方法を間違えるかもしれませんので、よく気をつけてください。

[ ステップアップC# ] [ C#プログラミング応用講義 ]