配列の概要
配列は、同じ型の複数の変数を含むデータ構造です。配列は型を使用して宣言されます:
配列には次のプロパティがあります:
配列は 1 次元、多次元、またはインターリーブにすることができます。
数値配列要素のデフォルト値はゼロに設定され、参照要素のデフォルト値は null に設定されます。
ジャグ配列は配列の配列であるため、その要素は参照型であり、null に初期化されます。
配列には 0 からインデックスが付けられます。n 個の要素を持つ配列には 0 から n-1 までのインデックスが付けられます。
配列要素は、配列型を含む任意の型にすることができます。
配列型は、抽象基本型 Array から派生した参照型です。この型は IEnumerable と IEnumerable を実装しているため、C# のすべての配列で foreach 反復を使用できます。
C# 配列のインデックスは 0 から始まります。つまり、配列のインデックスは 0 から始まります。 C# では配列は、他のほとんどの一般的な言語での動作と同様に動作します。ただし、注意すべき違いがいくつかあります。
配列を宣言するときは、識別子ではなく型の後に角かっこ ([]) を付ける必要があります。 C# では、識別子の後に角括弧を置くことは不正な構文です。
int[] table; // not int table[];
もう 1 つの詳細は、配列のサイズはその型の一部ではないということです。配列を宣言し、配列の長さに関係なく、それに int オブジェクトの任意の配列を割り当てることができます。
int[] numbers; // declare numbers as an int array of any size numbers = new int[10]; // numbers is a 10-element array numbers = new int[20]; // now it's a 20-element array
配列の宣言
C# は、1 次元配列、多次元配列 (長方形配列)、および配列の配列 (インターリーブ配列) をサポートしています。次の例は、さまざまな種類の配列を宣言する方法を示しています。
1 次元配列:
int[] numbers;
多次元配列:
string[,] names;
配列の配列 (インターリーブ):
byte[][] scores;
配列の宣言 (上記) では、実際には配列が作成されません。 。
C# では、配列はオブジェクトであり、インスタンス化する必要があります。次の例は、配列の作成方法を示しています。
1 次元配列:
int[] numbers = new int[5];
多次元配列:
string[,] names = new string[5,4];
配列の配列 (インターリーブ):
byte[][] scores = new byte[5][]; for (int x = 0; x < scores.Length; x++) { scores[x] = new byte[4]; }
より大きな配列も可能です。たとえば、3 次元の長方形配列を作成できます:
int[,,] buttons = new int[4,5,3];
長方形配列とギザギザ配列を混合することもできます。たとえば、次のコードは、int 型の 2 次元配列の 1 次元配列と、型の 3 次元配列を宣言します。
int[][,,][,] numbers;
配列の初期化
初期値を中括弧 ({}) で囲むことにより、宣言時に配列を初期化するシンプルで簡単な方法を提供します。次の例は、さまざまな型の配列を初期化するさまざまな方法を示しています。
注: 宣言時に配列が初期化されていない場合、配列メンバーは配列型のデフォルトの初期値に自動的に初期化されます。さらに、配列が型のフィールドとして宣言されている場合、その型がインスタンス化されるときに、配列はデフォルト値の null に設定されます。
1次元配列
int[] numbers = new int[5] {1, 2, 3, 4, 5}; string[] names = new string[3] {"Matt", "Joanne", "Robert"};
配列のサイズは次のように省略できます:
int[] numbers = new int[] {1, 2, 3, 4, 5}; string[] names = new string[] {"Matt", "Joanne", "Robert"};
初期化子が提供されている場合は、次のようにnew演算子も省略できます:
int[] numbers = {1, 2, 3, 4, 5}; string[] names = {"Matt", "Joanne", "Robert"};
多次元配列
int[,] numbers = new int[3, 2] { {1, 2}, {3, 4}, {5, 6} }; string[,] siblings = new string[2, 2] { {"Mike","Amy"}, {"Mary","Albert"} };
省略可能以下に示すように、配列のサイズ:
int[,] numbers = new int[,] { {1, 2}, {3, 4}, {5, 6} }; string[,] siblings = new string[,] { {"Mike","Amy"}, {"Mary","Albert"} };
初期化子が提供されている場合、以下に示すように new 演算子も省略できます:
int[,] numbers = { {1, 2}, {3, 4}, {5, 6} }; string[,] siblings = { {"Mike", "Amy"}, {"Mary", "Albert"} };
ギザギザの配列 (配列の配列)
は次のように使用できます。例 次のようにギザギザ配列を初期化します:
int[][] numbers = new int[2][] { new int[] {2,3,4}, new int[] {5,6,7,8,9} };
次のように最初の配列のサイズを省略できます:
int[][] numbers = new int[][] { new int[] {2,3,4}, new int[] {5,6,7,8,9} };
- または -
int[][] numbers = { new int[] {2,3,4}, new int[] {5,6,7,8,9} };
ギザギザ配列の要素には初期化構文がないことに注意してください。
配列メンバーへのアクセス
たとえば、次のコードは、numbers という名前の配列を作成し、配列の 5 番目の要素に 5 を割り当てます。
int[] numbers = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0}; numbers[4] = 5;
次のコードは、多次元配列を宣言します。 、[1, 1] にあるメンバーに 5 を割り当てます。
int[,] numbers = { {1, 2}, {3, 4}, {5, 6}, {7, 8}, {9, 10} }; numbers[1, 1] = 5;
以下は、2 つの要素を含む 1 次元のインターリーブ配列を宣言します。最初の要素は 2 つの整数の配列で、2 番目の要素は 3 つの整数の配列です。
int[][] numbers = new int[][] { new int[] {1, 2}, new int[] {3, 4, 5}};
次のステートメントは、最初の配列の最初の要素に 58 を割り当て、2 番目の配列の 2 番目の要素に 58 を割り当てます。 667:
numbers[0][0] = 58; numbers[1][1] = 667;
配列はオブジェクトです C# では、配列は実際にはオブジェクトです。 System.Array は、すべての配列型の抽象基本型です。 System.Array のプロパティだけでなく、他のクラス メンバーも使用できます。この使用例としては、Length プロパティを使用して配列の長さを取得することが挙げられます。次のコードは、数値配列の長さ (5) を LengthOfNumbers という変数に割り当てます。
int[] numbers = {1, 2, 3, 4, 5}; int LengthOfNumbers = numbers.Length;
System.Array クラスには、配列の並べ替え、検索、コピーのメソッドなど、その他の便利なメソッド/プロパティが多数用意されています。
配列で foreach を使用する
C# には foreach ステートメントも用意されています。このステートメントは、配列の要素を反復処理するための単純かつ明確な方法を提供します。
たとえば、次のコードはnumbersという名前の配列を作成し、foreachステートメントを使用して配列を反復処理します:
int[] numbers = {4, 5, 6, 1, 2, 3, -2, -1, 0}; foreach (int i in numbers) { System.Console.WriteLine(i); }
多次元配列のおかげで、同じメソッドを使用して要素を反復処理できます。例:
int[,] numbers = new int[3, 2] {{9, 99}, {3, 33}, {5, 55}}; foreach(int i in numbers) { Console.Write("{0} ", i); }
出力この例の例は次のとおりです:
9 99 3 33 5 55
ただし、多次元配列のおかげで、ネストされた for ループを使用すると、配列要素をより適切に制御できるようになります。
C# の配列に関連するその他の記事については、PHP 中国語 Web サイトに注目してください。