- Автор темы
- #1
Массивы.
И снова здравствуйте. Синтаксис создания массивов в языке C# несколько отличается от привычного :) вам синтаксиса языка C++. Надеюсь, вы сидите...
Массив в C# является ссылочным типом (см. предыдущий урок) и является наследником абстрактного класса System.Array. Таким образом, массив имеет собственные методы, поля и свойства (например, свойство Length хранит длину массива). Массив может хранить элементы любого типа, но для всех элементов массива тип должен быть одним и тем же. Базовым индексом массива является 0. Массивы могут одномерными, многомерными или "зубчатыми".
Одномерные массивы
Инициализация одномерных массивов
Многомерные массивы
Инициализация многомерных массивов
"Зубчатые" массивы
Если массива, описанные выше, сходны со статическими (нединамическими) массивами в C++, то "зубчатые" массивы - это ближайший аналог многомерных динамических массивов в C++. "Зубчатый" массив хранит в качестве элементов другие массивы, и каждый из этих массивов может иметь произвольную размерность. То есть "зубчатый" массив может не быть прямоугольным.
Инициализация "зубчатых" массивов
***********
при обращению к элементу за пределами массива (по некорректному индексу) генерируется исключение IndexOutOfRangeException.
***********
И снова здравствуйте. Синтаксис создания массивов в языке C# несколько отличается от привычного :) вам синтаксиса языка C++. Надеюсь, вы сидите...
Массив в C# является ссылочным типом (см. предыдущий урок) и является наследником абстрактного класса System.Array. Таким образом, массив имеет собственные методы, поля и свойства (например, свойство Length хранит длину массива). Массив может хранить элементы любого типа, но для всех элементов массива тип должен быть одним и тем же. Базовым индексом массива является 0. Массивы могут одномерными, многомерными или "зубчатыми".
Одномерные массивы
Код:
// создание массива из 10 элементов типа int
// все элементы массива инициализируются нулями
int [] intArray = new int [10];
// создание массива из 10 элементов типа string
// все элементы массива инициализируются null,
// т. к. string - ссылочный тип
string [] stringArray = new string [10];
Инициализация одномерных массивов
Код:
// создание + инициализация
int [] arr1 = new int[] {0, 3, 7, 17, 25};
// создание + инициализация (укороченный вариант)
int [] arr2 = {0, 3, 7, 17, 25};
// Можно объявить массив без инициализации
int [] arr3;
// Но его нельзя использовать, пока он не создан с помощью оператора new
/*
arr3[0] = 0; // Ошибка
arr3 = {0, 3, 7, 17, 25}; // тоже ошибка
*/
/*
arr3 = new int [] {0, 3, 7, 17, 25}; // правильно
arr3[0] = 10; // правильно
*/
Многомерные массивы
Код:
// создание двумерного массива из 10x10 элементов типа int
// все элементы массива инициализируются нулями
int [,] intArray = new int [10, 10];
// создание трехмерного массива из 10x10x10 элементов типа string
// все элементы массива инициализируются null,
// т. к. string - ссылочный тип
string [,,] stringArray = new string [10, 10, 10];
Инициализация многомерных массивов
Код:
// создание + инициализация массива 3x2
int [,,] arr1 = new int[,] { {0, 3}, {7, 17}, {25, 0} };
// создание + инициализация (укороченный вариант)
int [] arr2 = { {0, 3}, {7, 17}, {25, 0} };
// Можно объявить массив без инициализации
int [,] arr3;
// Но его нельзя использовать, пока он не создан с помощью оператора new
/*
arr3[0,0] = 0; // Ошибка
arr3 = { {0, 3}, {7, 17}, {25, 0} }; // тоже ошибка
*/
/*
arr3 = new int[,] { {0, 3}, {7, 17}, {25, 0} }; // правильно
arr3[0, 0] = 10; // правильно
*/
"Зубчатые" массивы
Если массива, описанные выше, сходны со статическими (нединамическими) массивами в C++, то "зубчатые" массивы - это ближайший аналог многомерных динамических массивов в C++. "Зубчатый" массив хранит в качестве элементов другие массивы, и каждый из этих массивов может иметь произвольную размерность. То есть "зубчатый" массив может не быть прямоугольным.
Код:
// создание "зубчатого" массива из 3 элементов
int [][] intArray = new int [3][];
for(int i = 0; i < intArray.Length; i++)
// каждый элемент содержит одномерный массив из 5 элементов
intArray[i] = new int[5];
// создание "зубчатого" непрямоугольного массива из 3 элементов
int [][] floatArray = new float [3][];
for(int i = 0; i < floatArray.Length; i++)
// каждый элемент содержит одномерный массив из i + 1 элементов
floatArray[i] = new float[i + 1];
Инициализация "зубчатых" массивов
Код:
// вариант
int [][] intArray = new int [3][];
intArray[0] = new int[] {1, 2, 3, 4, 5};
intArray[1] = new int[] {3, 4, 5};
intArray[2] = new int[] {1, 2, 3, 4, 5, 6, 7};
// вариант
int[][] myArray = new int [][]
{
new int[] {1, 2, 3, 4, 5},
new int[] {3, 4, 5},
new int[] {1, 2, 3, 4, 5, 6, 7}
};
// укороченный вариант
int[][] myArray =
{
new int[] {1, 2, 3, 4, 5},
new int[] {3, 4, 5},
new int[] {1, 2, 3, 4, 5, 6, 7}
};
// вариант ("зубчатые" и "обычные" массивы можно смешивать)
int [][,] myMixedArray = new int [3][,]
{
new int[,] { {1, 2}, {3, 4} },
new int[,] { {5, 6}, {7, 8}, {9, 10} },
new int[,] { {11, 12} }
};
// Доступ к элементу массива
System.Console.WriteLine(myMixedArray[0][0,0]); // отобразится 1
// Можно объявить массив без инициализации
int [][] arr3;
// Но его нельзя использовать, пока он не создан с помощью оператора new
***********
при обращению к элементу за пределами массива (по некорректному индексу) генерируется исключение IndexOutOfRangeException.
***********