Speak.Me Учить иностранные слова

C#: массивы

Массив — фиксированный набор элементов одного типа. Массив — ссылочный тип. Элементы массива всегда хранятся в смежных областях памяти, что обеспечивает крайне эффективный доступ к ним.

Массив обозначается квадратными скобками после типа элемента. В скобках указывается размер массива:

Квадратные скобки также служат указателем массива, обеспечивая доступ к его элементам по их позиции:

Массив индексируется с нуля.

С помощью инструкции for можно перебрать все элементы массива:

Массив также реализует интерфейс IEnumerable<T>, в силу чего можно перечислять его элементы с помощью инструкции foreach:

Если попытаться обратиться к несуществующему элементу массива во время выполнения возникнет ошибка IndexOutOfRangeException.

Свойство массива Length возвращает общее число элементов массива. После создания массива его размер изменять уже нельзя. В пространстве имен System.Collection содержаться структуры, такие как динамические массивы и словари (dictionarues), размер которых можно менять.

Массив можно заполнить сразу при инициализации:

или даже проще:

Все массивы наследуются от класса System.Array, который определяет ряд общих методов и свойств для всех массивов:

  • свойство Length и Rank
  • метод CreateInstance, позволяющий динамически создавать массивы
  • методы GetValue/SetValue, позволяющие получать и устанавливать элементы массива невзирая на его тип
  • метод BinarySearch, выполняющий поиск в сортированном массиве
  • методы IndexOf, LastIndexOf, Find, FindIndex, FindLastIndex, выполняющие поиск в несортированном массиве
  • метод Sort, сортирующий массив
  • метод Copy, копирующий массив

Элементы вновь созданного, но еще не заполненного массива, автоматически заполняются значениями по умолчанию. Значения по умолчанию — это результат бинарного обнуления памяти для каждого конкретного типа. Например для целых чисел значением по умолчанию будет 0, для ссылочных типов — null.

Многомерные массивы

Существует два вида многомерных массивов: прямоугольный (rectangular) массив и невыровненный (jagged) массив.

Прямоугольный (rectangular) массив — представляет собой блок памяти с n-ым количеством измерений. Прямоугольный массив определяется с использованием запятых, которые отделяю его измерения:

Метод GetLength принимает в качестве аргумента индекс измерения и возвращает его длину:

Прямоугольный массив может быть инициализирован сразу при объявлении:

При этом конструкцию new int[,] (выделена жирным) можно опустить.

Невыровненный (jagged) массив — это массив массивов. Невыровненный массив объявляется с помощью идущих друг за другом пар квадратных скобок:

Внутреннее измерение при объявлении не указывается, поскольку в отличие от прямоугольного массива, в невыровненном каждый внутренний массив может иметь разную длину. Каждому внутреннему массиву автоматически присваивается значение null, а не пустой массив, и поэтому каждый внутренний массив нужно объявлять отдельно.

Невыровненный массив также может быть инициализирован при объявлении:

Конструкцию new int[][] (выделена жирным) также можно опустить.

Упрощенная инициализация массива

Существует два способа упрощенной инициализации массива. Первый уже был рассмотрен выше и состоит в том что можно опустить ключевое слово new:

Другой способ состоит в том, что можно опустить указание типа после ключевого слова new и дать компилятору возможность угадать тип самому. Это сокращение полезно при передаче массива в качестве аргумента. При этом массив можно создавать налету:

Обсуждение закрыто.