Массивы в C#
Одномерные массивы
public static void Main()
{ //Объявляем переменную array, точно так же, как раньше объявляли переменные других типов.
//Тип массива чисел - это int[]. Аналогично, есть типы string[], double[], и т.д.
int[] array;
int number;
//Инициализируем переменную array значением "new int[3]" - новый массив длины 3.
array = new int[3];
number = 10;
//Обращение к элементам массива
array[0] = 1;
array[1] = 2;
array[2] = 3;
//Массив, как и остальные типы, имеет собственные свойства и методы
Console.WriteLine(array.Length); //Выведет 3
//Обратите внимание, что array.ToString() работает не так, как хотелось бы.
Console.WriteLine(array.ToString()); //Выведет System.Int32[]
//Этот код вызовет exception - выход за границы массива
Console.WriteLine(array[100]);
var array2 = new[] { 1, 2, 3 };
//Элементы массива можно пробежать так
for (int i = 0; i < array2.Length; i++)
Console.WriteLine(array2[i]);
//Но лучше использовать специально предназначенный для этого оператор foreach
//foreach исключает любые ошибки в индексах и выглядит понятнее.
foreach (var e in array2)
Console.WriteLine(e);
//Иногда, например, в случае присвоения элементов массива foreach не подходит.
for (int i = 0; i < array2.Length; i++)
array2[i] = 2 * i;
}
Многомерные массивы
public static void Main()
{
//Двумерные массивы имеют тип int[,] (соответственно, double[,], string[,] и т.д.)
int[,] twoDimensionalArray = new int[2, 3];
//Адресация двумерных массивов также идет через запятую
twoDimensionalArray[1,2]=1;
for (int i = 0; i < twoDimensionalArray.GetLength(0); i++)
for (int j = 0; j < twoDimensionalArray.GetLength(1); j++)
twoDimensionalArray[i, j] = 10*i + j;
//В памяти значения хранятся в следующем порядке: 0,1,2,10,11,12
Console.WriteLine(twoDimensionalArray.Length);
//Метод выше напечатает 6. Длины размерностей нужно получать через метод GetLength
//Могут быть массивы и бо́льшей размерности
int[, ,] threeDimensionalArray = new int[2, 3, 4];
}
Ступенчатые массивы
public static void Main()
{
//Это - массив массивов. Поскольку массив является типом (как int или string),
//то можно делать массивы этого типа, т.е. - массивы массивов
int[][] array;
array = new int[2][];
//Так можно - array инициализирован
Console.WriteLine(array.Length);
//Выдаст исключение, ведь нулевой массив в этом массиве массивов не инициализирован
Console.WriteLine(array[0].Length);
//Каждую строку ступенчатого массива нужно проинициализировать отдельно новым массивом.
array[0] = new int[3];
//Теперь это сработает, потому что мы проинициализировали нулевой элемент
Console.WriteLine(array[0].Length);
//А это по-прежнему вызовет исключение, потому что первый элемент не инициализирован
Console.WriteLine(array[1].Length);
//Необходимо было прописать, например, array[1] = new int[6];
//В отличие от многомерного массива, индексация производится двумя парами скобок
array[0][0] = 1;
//В отличие от многомерного массива, являющегося прямоугольником или параллелепипедом,
//в массиве массивов все хранимые массивы могут быть разной длины
array[1] = new int[10];
//Могут быть массивы массивов массивов...
int[][][] array1=new int[2][][];
//или массивы двумерных массивов
int[][,] array2=new int[2][,];
//а также двумерные массивы массивов
int[,][] array3 = new int[2, 3][];
//Самое главное - если есть тип,
//то из него можно сделать массив, который тоже будет типом.
}