C#の一次元配列
他の多くのプログラム言語と同様に、C#でも配列を使うことができる。配列は、同じデータ型の多数のデータを集めたもので、個々のデータは添え字と呼ばれる番号を指定することで読み書きすることができる。まず、最も単純な一次元の配列から見てみよう。以下のサンプルソースは、10個の整数を持つ配列変数を使った例である。
1: using System;
2:
3: namespace ConsoleApplication70
4: {
5: class Class1
6: {
7: static void Main(string[] args)
8: {
9: int [] ar = new int[10];
10: for( int i=0; i<10; i++ )
11: {
12: ar[i] = i;
13: }
14: for( int i=0; i<10; i++ )
15: {
16: Console.WriteLine( ar[i] );
17: }
18: }
19: }
20: } |
|
単純な一次元の配列を使用したサンプル・プログラム1 |
10個の整数を持つ配列変数を使っている。i番目の要素には、iの値を代入している。 |
これを実行すると以下のようになる。
 |
サンプル・プログラム1の実行結果 |
配列の内容が先頭から順に表示される。
|
配列変数は12行目や16行目のように、2つの角カッコ( [ ] )によって添え字を囲んで記述する。配列変数の宣言は9行目にあるとおりである。まず、最初のintは整数型であることを示す。そして、次の[]が配列であることを示す(注意:読者のブラウザのフォント設定によっては、左角括弧と右角括弧がくっついて四角形(□)
のように見える場合があるかも知れないが、これは2つの括弧記号が連続して並んでいるものなので、注意されたい)。この2つを合わせたint []は、整数型の配列というデータ型を表す。そして、次に記述されたarは配列になるべき変数名である。ここまでの順番は、int
[] 変数名であって、int 変数名 []ではないことに注意していただきたい。角カッコは、読み書きに使うときには変数名の後に付くが、宣言時には変数名の手前に来る。さて、次のイコール(=)は、変数に初期値を代入することを意味している。初期値といっても配列に入れる値ではなく、配列インスタンスそのものを入れる。C#では配列も一種のインスタンスなのである。そのため、newキーワードを用いて、新しいインスタンスを生成することを示す。そして、その後に作成する配列のデータ型を記述する。ここでは整数なので、キーワードintを記述している。それだけなら、配列の生成にならないので、その後にさらにカッコを続ける。角カッコの中には、要素の数を記述する。ここでは10を記述している。
以上を要約すれば、9行目で行われることは、整数型の配列変数であるarを宣言することと、それに初期値として、整数型で10個の値を入れられる配列のインスタンスを作成して代入することである。
他の部分は難しくはないので簡単に説明すると、12行目は、配列変数arのi番目の要素に、iの値を代入している。16行目は、配列変数arのi番目の要素を取り出して、これを出力している。
基本的に、既存のプログラム言語のプログラマが引っかかりそうな個所は宣言と初期化だけで、後は悩むことはないだろう。
2次元以上の配列
C#では、1次元だけでなく、2次元の配列もできる。以下がそのサンプルソースである。
1: using System;
2:
3: namespace ConsoleApplication71
4: {
5: class Class1
6: {
7: static void Main(string[] args)
8: {
9: int [,] ar = new int[10,10];
10: for( int i=0; i<10; i++ )
11: {
12: for( int j=0; j<10; j++ )
13: {
14: ar[i,j] = i*j;
15: }
16: }
17: for( int i=0; i<10; i++ )
18: {
19: for( int j=0; j<10; j++ )
20: {
21: Console.Write( ar[i,j] );
22: Console.Write( " " );
23: }
24: Console.WriteLine();
25: }
26: }
27: }
28: } |
|
2次元配列を使用したサンプル・プログラム2 |
配列の添え字には、カンマで区切った2つの数値を記述する。 |
これを実行すると以下のようになる。
 |
サンプル・プログラム2の実行結果 |
配列の(i, j)の要素にはi * jの値が入っている。
|
ここで注目すべきは9行目である。1次元の場合と違う個所は2つある。最初は、intの次が[,]となっている点である。カンマによって2つの添え字が記述可能であることが暗示されている。次に注目すべき個所はこの行の後半にある。配列のサイズを示す記述が[10,10]と2つの値に増えている。これは、最初の添え字が10個。次の添え字が10個の、計100個の要素を持つ2次元配列を指定している。
配列へのアクセスを行う場合も、14行目や21行目のように、各カッコ内の添え字をカンマで区切って行う。
同様に3次元配列も可能である。以下にそのサンプルソースを示す。
1: using System;
2:
3: namespace ConsoleApplication72
4: {
5: class Class1
6: {
7: static void Main(string[] args)
8: {
9: int [,,] ar = new int[3,3,3];
10: for( int i=0; i<3; i++ )
11: {
12: for( int j=0; j<3; j++ )
13: {
14: for( int k=0; k<3; k++ )
15: {
16: ar[i,j,k] = i*j*k;
17: }
18: }
19: }
20: for( int i=0; i<3; i++ )
21: {
22: for( int j=0; j<3; j++ )
23: {
24: for( int k=0; k<3; k++ )
25: {
26: Console.Write( ar[i,j,k] );
27: Console.Write( " " );
28: }
29: Console.WriteLine();
30: }
31: Console.WriteLine();
32: }
33: }
34: }
35: } |
|
3次元配列を使用したサンプル・プログラム3 |
配列の添え字は3つに増える。 |
これを実行すると以下のようになる。
 |
サンプル・プログラム3の実行結果 |
配列の(i, j, k)の要素にはi * j * kの値が入っている。
|
基本的に角カッコ内の区切りのカンマが増えただけで、プログラム内容そのものは、2次元の場合と同じである。詳しい説明は必要ないだろう。
Insider.NET 記事ランキング
本日
月間