Массивы в 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][];

    //Самое главное - если есть тип, 
   //то из него можно сделать массив, который тоже будет типом.
}
Последнее изменение: Saturday, 10 February 2018, 11:19