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
, как показано ниже:
Range r = 0..2; //the end of the range is exclusive
foreach (var itm in gothicBands[r])
{
// Вывести имя.
Console.Write(itm + ", ");
}
Console.WriteLine("\n");
Диапазоны можно определять с применением целых чисел или переменных типа
Index
. Тот же самый результат будет получен посредством следующего кода:
Index idx1 = 0;
Index idx2 = 2;
Range r = idx1..idx2; // Конец диапазона является исключающим.