This article has been localized into Russian by the community.
Массивы
Массивы работают как коллекции элементов, например, строк. С их помощью можно собирать элементы в одну группу и выполнять над ними различные операции, например, сортировку. Кроме того, несколько методов framework работают с массивами, чтобы можно было принимать набор элементов, а не один. Сам по себе этот факт позволяет немного узнать о массивах.
Массив декларируется похоже на переменную, набором квадратных скобок после типа данных, как здесь:
string[] names;
Вам нужно создать экземпляр массива, чтобы использовать его, как здесь:
string[] names = new string[2];
Число (2) это размер массива, который означает количество элементов, которое он может вмещать.
names[0] = "John Doe";
Но почему 0? Как и во многих вещах в мире программирования, подсчет начинается с 0 вместо 1. Итак, первый пункт-это индекс 0, следующая-1 и так далее. Об этом следует помнить при заполнении массива элементами, так как переполнение приведет к исключению. Когда вы смотрите на инициализатор, устанавливая размер массива равным 2, может показаться естественным поместить в него номер элемента 0, 1 и 2, но это слишком много. Если это сделать, будет выведено исключение. Мы обсудим исключения в следующей главе.
Ранее мы узнали о циклах, и, очевидно, они отлично сочетаются с массивами. Наиболее распространенным способом получения данных из массива является циклическое выполнение операций с каждым значением. Давайте используем предыдущий массив, чтобы сделать реальный пример:
using System;
using System.Collections;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string[] names = new string[2];
names[0] = "John Doe";
names[1] = "Jane Doe";
foreach(string s in names)
Console.WriteLine(s);
Console.ReadLine();
}
}
}
Мы используем цикл foreach, потому что он самый простой, но, конечно, мы могли бы использовать один из других типов цикла. Цикл for также хорош с массивами, например, если вам нужно подсчитать каждый элемент, например:
for(int i = 0; i < names.Length; i++)
Console.WriteLine("Item number " + i + ": " + names[i]);
Это на самом деле очень просто. Мы используем свойство массива Length, чтобы решить, сколько раз цикл должен повторяться, затем мы используем счетчик (i) для вывода, где мы находимся в процессе, а также получить элемент из массива. Точно так же, как мы использовали число, так называемый индексатор, чтобы поместить элементы в массив, мы можем использовать его, чтобы снова получить определенный элемент.
Я говорил вам ранее, что мы можем использовать массив для сортировки диапазона значений, и это на самом деле очень просто. Класс Array содержит набор интеллектуальных методов для работы с массивами. В этом примере вместо строк будут использоваться числа, чтобы попробовать что-то другое, но это могут быть и строки. Я хочу показать вам другой способ заполнения массива, который намного проще, если у вас есть небольшой, предопределенный набор элементов, которые вы хотите поместить в свой массив. Взгляните:
int[] numbers = new int[5] { 4, 3, 8, 0, 5 };
Одной строкой мы создали массив размером 5 и заполнили его 5 целыми числами. Заполняя массив подобным образом, вы получаете дополнительное преимущество, так как компилятор проверит и удостоверится, что вы не помещаете слишком много элементов в массив. Попробуйте добавить еще число - вы увидите, что компилятор возражает.
На самом деле, это можно сделать еще короче, вот так:
int[] numbers = { 4, 3, 8, 0, 5 };
Это коротко, и вам не нужно указывать размер. Хотя первый подход может быть легче читать позже.
Давайте попробуем отсортировать массив - вот полный пример:
using System;
using System.Collections;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
int[] numbers = { 4, 3, 8, 0, 5 };
Array.Sort(numbers);
foreach(int i in numbers)
Console.WriteLine(i);
Console.ReadLine();
}
}
}
Единственная реальная новая вещь здесь - оператор Array.Sort. Он может принимать различные параметры, для различных видов сортировки, но в данном случае это просто наш массив. Как видно из результата, наш массив отсортирован. Класс Array также имеет другие методы, например, метод Reverse (). Вы можете посмотреть его в документации, чтобы увидеть все возможности класса Array.
Массивы, которые мы использовали до сих пор, имели только одно измерение. Однако, массивы C# могут быть многомерными, иногда называются массивы в массивах. Многомерные массивы поставляются в C# в двух вариантах: прямоугольные массивы и неровные массивы. Разница в том, что с прямоугольными массивами все размеры должны быть одного размера, отсюда и название "прямоугольные". Ступенчатый массив может иметь различные размеры. Многомерные массивы являются трудным предметом и выходят за рамки этого учебника.