Выбрать главу

Давайте посмотрим на некоторые из членов в действии. Показанный далее вспомогательный метод использует статические методы Reverse() и Clear() для вывода на консоль информации о массиве строковых типов:

static void SystemArrayFunctionality()

{

  Console.WriteLine("=> Working with System.Array.");

  // Инициализировать элементы при запуске.

  string[] gothicBands = {"Tones on Tail", "Bauhaus", "Sisters of Mercy"};

  // Вывести имена в порядке их объявления.

  Console.WriteLine("-> Here is the array:");

  for (int i = 0; i < gothicBands.Length; i++)

  {

    // Вывести имя.

    Console.Write(gothicBands[i] + ", ");

  }

  Console.WriteLine("\n");

  // Обратить порядок следования элементов...

  Array.Reverse(gothicBands);

  Console.WriteLine("-> The reversed array");

  // ...и вывести их.

  for (int i = 0; i < gothicBands.Length; i++)

  {

    // Вывести имя.

    Console.Write(gothicBands[i] + ", ");

  }

  Console.WriteLine("\n");

  // Удалить все элементы кроме первого.

  Console.WriteLine("-> Cleared out all but one...");

  Array.Clear(gothicBands, 1, 2);

  for (int i = 0; i < gothicBands.Length; i++)

  {

    // Вывести имя.

    Console.Write(gothicBands[i] + ", ");

  }

  Console.WriteLine();

}

Вызов метода SystemArrayFunctionality() дает в результате следующий вывод:

=> Working with System.Array.

-> Here is the array:

Tones on Tail, Bauhaus, Sisters of Mercy,

-> The reversed array

Sisters of Mercy, Bauhaus, Tones on Tail,

-> Cleared out all but one...

Sisters of Mercy,,,

Обратите внимание, что многие члены класса System.Array определены как статические и потому вызываются на уровне класса (примерами могут служить методы Array.Sort() и Array.Reverse()). Методам подобного рода передается массив, подлежащий обработке. Другие члены System.Array (такие как свойство Length) действуют на уровне объекта, поэтому могут вызываться прямо на типе массива.

Использование индексов и диапазонов (нововведение в версии 8.0)

Для упрощения работы с последовательностями (включая массивы) в версии C# 8 были введены два новых типа и две новых операции, применяемые при работе с массивами:

System.Index представляет индекс в последовательности;

System.Range представляет поддиапазон индексов;

• операция конца (^) указывает, что индекс отсчитывается относительно конца последовательности;

• операция диапазона (...) устанавливает в своих операндах начало и конец диапазона.

На заметку! Индексы и диапазоны можно использовать с массивами, строками, Span<T> и ReadOnlySpan<T>.

Как вы уже видели, индексация массивов начинается с нуля (0). Конец последовательности — это длина  последовательности минус единица. Показанный выше цикл for, который выводил содержимое массива gothicBands, можно записать по-другому:

for (int i = 0; i < gothicBands.Length; i++)

{

  Index idx = i;

  // Вывести имя.

  Console.Write(gothicBands[idx] + ", ");

}

Индекс с операцией конца позволяет указывать количество позиций, которые необходимо отсчитать от конца последовательности, начиная с длины. Не забывайте, что последний элемент в последовательности находится в позиции, на единицу меньше длины последовательности, поэтому ^0 приведет к ошибке. В следующем коде элементы массива выводятся в обратном порядке:

for (int i = 1; i <= gothicBands.Length; i++)

{

  Index idx = ^i;

  // Вывести имя.

  Console.Write(gothicBands[idx] + ", ");

}

Операция диапазона определяет начальный и конечный индексы и обеспечивает доступ к подпоследовательности внутри списка. Начало диапазона является включающим, а конец — исключающим. Например, чтобы извлечь первые два элемента массива, создайте диапазон от 0 (позиция первого элемента) до 2 (на единицу больше желаемой позиции):

foreach (var itm in gothicBands[0..2])

{

  // Вывести имя.

  Console.Write(itm + ", ");

}

Console.WriteLine("\n");

Диапазоны можно передавать последовательности также с использованием нового типа данных Range, как показано ниже: