配列基底クラス


System.Array

以前、全ての配列は System.Array を継承しているといいました
つまり、全ての配列は System.Array と相互に参照することができるのです

このクラスの機能を用いれば、配列を制御及び監視することができます
例えば、前回のサンプルプログラムは for ループの終了条件にリテラルを用いました
この値は配列の要素数であり、つまり配列の最終要素を表示したらループを抜けるという意図です

string[] str = new string[3];
for (int i = 0 ; i < 3 ; i++) ...

このような場合、リテラルを使うのは避けるべきです
for の終了条件の真の意味はリテラルの数ではなく配列の要素数です
もし、配列の要素数をプログラムの改良時に変更し、ループのリテラルの変更を忘れると
これは無駄なバグの原因に繋がることがあります

System.Array は配列の要素へのアクセスや、要素数や次元数の管理を行っています
全ての配列は Array を継承しているので、デフォルトでこの機能を利用できます
Array クラスについて詳しくは .NET クラスライブラリのリファレンスで確認してください

例えば、配列の要素数をえるには Length プロパティを使用します

public int Length {get;}

これは、その配列が持てる要素数(つまり配列の大きさ)を返します
つまり、前回のプログラムの for 部分はこのように解決できます
class Test {
	public static void Main() {
		string[] str = {
			"Kitty on your lap",
			"Silver Gene",
			"Nekoneko Zoo"
		};
		for (int i = 0 ; i < str.Length ; i++)
			System.Console.WriteLine(str[i]);
	}
}
このプログラムでは、ループの終了条件が i < str.Length となっています
これは、カウンタ変数が配列の長さよりも小さければという意味になります

Length プロパティは配列の最大要素数を取得します
つまり、多次元配列の場合も同様で全ての要素数を返します
例えば 3 × 3 の多次元配列ならば Length は 9 を返すでしょう

しかし、この場合2次元目の最大要素数を取得したい場合に困ります
特定次元の要素数を得るには GetLength() メソッドを使用します

public int GetLength(int dimension);

dimension には、要素数を取得する次元番号を指定します
これを用いて、配列を構成する各次元の大きさを取得することができます
class Test {
	public static void Main() {
		string[,] str = {
			{"Rena" , "Yuki" , "Mimi"} ,
			{"Di Gi Charat" , "Petit Charat" , "Rabi en Rose"} ,
		};

		for (int i = 0 ; i < str.GetLength(0) ; i++)
			for (int j = 0 ; j < str.GetLength(1) ; j++)
				System.Console.WriteLine(str[i , j]);
	}
}
このプログラムも前回のプログラムを改良したものです
for のループ条件が前回のリテラルを使ったものよりダイナミックになったため保守が容易になります

因みに、配列の次元数のことを .NET ではランクと呼びます
配列のランクを取得するには Rank プロパティを用います

public int Rank {get;}

このように、多くの便利メソッドやプロパティが存在するので調べてください
Array クラスは配列を操作するための基本的で強力な命令セットがサポートされています



前のページへ戻る次のページへ