配列 (C# と Java の比較)
更新 : 2007 年 11 月
配列とは同じデータ型の項目が順序付けられたコレクションで、配列名と、配列の先頭から目的の項目までのオフセットを使用してアクセスできます。C# と Java の間には、配列の宣言方法と使用方法に重要な違いがあります。
1 次元配列
1 次元配列では、固定数の項目を直線的に格納し、単一のインデックス値を使って任意の 1 項目を識別します。C# の配列宣言では、角かっこはデータ型の後に配置する必要があり、Java のように変数名の後に配置することはできません。そのため、integers 型の配列は、次の構文を使用して宣言します。
int[] arr1;
C# では、次の宣言は無効です。
//int arr2[]; //compile error
配列を宣言したら、Java の場合と同様に、new キーワードを使って配列のサイズを設定します。次の例のように配列参照を宣言します。
int[] arr;
arr = new int[5]; // create a 5 element integer array
次に、Java と同じ構文を使用して、1 次元配列内の要素にアクセスします。C# の配列インデックス番号も 0 から始まります。次の構文では、前の配列の最後の要素にアクセスします。
System.Console.WriteLine(arr[4]); // access the 5th element
初期化
C# の配列要素は、次のように Java と同じ構文を使用して作成時に初期化できます。
int[] arr2Lines;
arr2Lines = new int[5] {1, 2, 3, 4, 5};
C# の初期化子の数は、Java と違って、配列のサイズに正確に一致する必要があります。このため、C# の配列は、次のように 1 行で宣言および初期化できます。
int[] arr1Line = {1, 2, 3, 4, 5};
この構文は、初期化子の数に一致するサイズの配列を作成します。
プログラム ループでの初期化
C# で配列を初期化するには、for ループを使用することもできます。配列の各要素をゼロに設定するループを次に示します。
int[] TaxRates = new int[5];
for (int i=0; i<TaxRates.Length; i++)
{
TaxRates[i] = 0;
}
ジャグ配列
C# も Java も、行ごとに列の数が異なるジャグ配列 (四角形ではない配列) の作成をサポートします。たとえば、次のジャグ配列には、第 1 行に 4 つのエントリがあり、第 2 行に 3 つのエントリがあります。
int[][] jaggedArray = new int[2][];
jaggedArray[0] = new int[4];
jaggedArray[1] = new int[3];
多次元配列
C# では、同じ型の値の行列のような、通常の多次元配列を作成できます。Java も C# もジャグ配列をサポートしますが、C# は多次元配列つまり配列の配列もサポートします。
多次元配列は、次の構文を使用して宣言します。
int[,] arr2D; // declare the array reference
float[,,,] arr4D; // declare the array reference
宣言した後は、次のようにメモリを配列に割り当てます。
arr2D = new int[5,4]; // allocate space for 5 x 4 integers
メモリを割り当てた後、次の構文を使用して配列の要素にアクセスします。
arr2D[4,3] = 906;
配列は 0 から始まるので、この行は、第 4 行の第 5 列の要素に 906 を設定します。
初期化
多次元配列は、次のいずれかのメソッドによって、1 つのステートメントで作成、設定、および初期化できます。
int[,] arr4 = new int [2,3] { {1,2,3}, {4,5,6} };
int[,] arr5 = new int [,] { {1,2,3}, {4,5,6} };
int[,] arr6 = { {1,2,3}, {4,5,6} };
プログラム ループでの初期化
配列内のすべての要素は、次の例に示すように、入れ子になったループを使って初期化できます。
int[,] arr7 = new int[5,4];
for(int i=0; i<5; i++)
{
for(int j=0; i<4; j++)
{
arr7[i,j] = 0; // initialize each element to zero
}
}
System.Array クラス
.NET Framework では、配列は Array クラスのインスタンスとして実装されます。このクラスには、Sort や Reverse など役に立つメソッドがいくつかあります。
これらのメソッドが簡単に使用できることを次の例に示します。最初に、Reverse メソッドを使用して配列の要素を反転し、次に、Sort メソッドによって各要素を並べ替えます。
class ArrayMethods
{
static void Main()
{
// Create a string array of size 5:
string[] employeeNames = new string[5];
// Read 5 employee names from user:
System.Console.WriteLine("Enter five employee names:");
for(int i=0; i<employeeNames.Length; i++)
{
employeeNames[i]= System.Console.ReadLine();
}
// Print the array in original order:
System.Console.WriteLine("\nArray in Original Order:");
foreach(string employeeName in employeeNames)
{
System.Console.Write("{0} ", employeeName);
}
// Reverse the array:
System.Array.Reverse(employeeNames);
// Print the array in reverse order:
System.Console.WriteLine("\n\nArray in Reverse Order:");
foreach(string employeeName in employeeNames)
{
System.Console.Write("{0} ", employeeName);
}
// Sort the array:
System.Array.Sort(employeeNames);
// Print the array in sorted order:
System.Console.WriteLine("\n\nArray in Sorted Order:");
foreach(string employeeName in employeeNames)
{
System.Console.Write("{0} ", employeeName);
}
}
}
出力
Enter five employee names:
Luca
Angie
Brian
Kent
Beatriz
Array in Original Order:
Luca Angie Brian Kent Beatriz
Array in Reverse Order:
Beatriz Kent Brian Angie Luca
Array in Sorted Order:
Angie Beatriz Brian Kent Luca