一次元配列の宣言および初期値付き宣言の例を以下に示す[1]。
int[] array1 = new int[5]; // 5 個の整数値を含む 1 次元配列. 初期値 0 int[] array2 = new int[] { 1, 3, 5, 7, 9 }; int[] array3 = { 1, 3, 5, 7, 9 }; string[] stringArray = new string[6]; // 6 個の文字列を含む 1 次元配列 string[] weekDays1 = new string[] { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" }; string[] weekDays2 = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" };
多次元配列の宣言および初期値付き宣言の例を以下に示す[2]。
int[,] array = new int[4, 2]; // 4行2列 int[,] array2D = new int[,] { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } }; string[,] array2Db = new string[3, 2] { {"one", "two"}, {"three", "four"}, {"five", "six"} }; int[,] array2D = { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } }; string[,] array2Db = { {"one", "two"}, {"three", "four"}, {"five", "six"} };
多次元配列の参照は array2D[3,0]、array2D[1,1] のように表記する。
C#では一次元配列の長さは 配列(変数)名.Length で長さを取得できる。
多次元配列の場合、配列(変数)名.Length で得られるのは全要素数である。
各次元の配列数を求める場合は
例えば、 int[,] array = new int[4, 2]; の場合、array.GetLength(0), array.GetLength(1) が それぞれ 4, 2 である。
C言語では
int data[3][5]; data[2][3] = 123;と書くものが、C# では
int[,] data = new int[3,5]; data[2,3] = 123;となることは上で述べた。しかし、C# でも data[2][3] という表現がないわけではない。 つぎのように、配列の要素が配列であるとき、このような表現となる。
int[][] data = new int[3][]; data[0] = new int[5]; data[1] = new int[5]; data[2] = new int[5]; data[2][3] = 123;
C言語でも配列の配列が存在する。 上のように、配列の配列を宣言しても、int data[3][5] のような配列(メモリ上では一次元配列)でも 要素の参照 data[2][3] は同じ表現となる。 C#では、両者が区別されるので、分かりやすいと言えるかも知れない。
別の配列に、配列中のある範囲内の要素をコピーするには、Array.Copyメソッドを使用する。
public static void Copy( Array sourceArray, // コピー元配列 int sourceIndex, // コピー元配列の先頭位置 Array destinationArray, // コピー先配列 int destinationIndex, // コピー先配列の先頭位置 int length // コピーする要素数 )
配列の要素にあるものが含まれているかどうかを調べるには Array.IndexOf メソッドを使うのが楽である。 下に例を示す。最初にみつかった位置(インデックス)が返される。見つからなかったときは、-1 が返される。
using System; class Test { static void Main() { string[] weekDays = new string[] { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" }; Console.WriteLine("Array.IndexOf(weekDays, \"Wed\") = " + Array.IndexOf(weekDays, "Wed")); Console.WriteLine("Array.IndexOf(weekDays, \"fri\") = " + Array.IndexOf(weekDays, "fri")); } }
このプログラムの実行結果を下に示す。
Array.IndexOf(weekDays, "Wed") = 3 Array.IndexOf(weekDays, "fri") = -1
先頭からではなく、途中から探すときは public static int IndexOf(Array array, Object value, int startIndex) を使う。
また、先頭からではなく、末尾から探す(最後に見つかったものを返す)には Array.LastIndexOfメソッドを使用する。