Класс System.Array

Ранее уже говорилось, что все массивы в С# построены на основе базового клас­са Array, который содержит полезные для программиста свойства и методы, часть из которых перечислены в табл. 6.1.

Таблица 6.1. Основные элементы класса Array

Элемент Вид Описание
Length Свойство Количество элементов массива (по всем размерностям)
Rank Свойство Количество размерностей массива
BinarySearch Статический метод Двоичный поиск в отсортированном массиве
Clear Статический метод Присваивание элементам массива значений по умолчанию
Сору Статический метод Копирование заданного диапазона элементов одного массива в другой массив
СоруТо Метод Копирование всех элементов текущего одномерного массива в другой одномерный массив
GetValue Метод Получение значения элемента массива
IndexOf Статический метод Поиск первого вхождения элемента в одномерный массив
LastIndexOf Статический метод Поиск последнего вхождения элемента в одномерный массив
Reverse Статический метод Изменение порядка следования элементов на обратный
SetValue Метод Установка значения элемента массива
Sort Статический метод Упорядочивание элементов одномерного массива

Свойство Length позволяет реализовывать алгоритмы, которые будут работать с массивами различной длины или, например, со ступенчатым массивом. Исполь­зование этого свойства вместо явного задания размерности исключает возмож­ность выхода индекса за границы массива. В листинге 6.3 продемонстрировано применение элементов класса Array при работе с одномерным массивом.

Листинг 6.3. Использование методов класса Array с одномерным массивом

using System;

namespace ConsoleApplication1

{

class Class1

{

static void Main()

{

int[] a = { 24, 50, 18, 3, 16, -7, 9, -1 };

PrintArray("Исходный массив:", а);

Console.WriteLine(Array.IndexOf(a, 18));

Array.Sort(a);

PrintArray("Упорядоченный массив:", а);

Console.WriteLine(Array.BinarySearch(a, 18));

}

public static void PrintArray(string header, int[] a)

{

Console.WriteLine(header);

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

Console.Write("\t" + a[i]);

Console.WriteLine();

}

}

}

Методы Sort, IndexOf и BinarySearch являются статическими, поэтому к ним об­ращаются через имя класса, а не экземпляра, и передают в них имя массива. Двоичный поиск можно применять только для упорядоченных массивов. Он выполняется гораздо быстрее, чем линейный поиск, реализованный в методе IndexOf. В листинге поиск элемента, имеющего значение 18, выполняется обоими этими способами.

ПРИМЕЧАНИЕ

Рассмотренные методы имеют по несколько версий (в этом случае употребляется термин «перегруженные методы»), что позволяет выполнять поиск, сортировку и копирование как в массиве целиком, как и в его указанном диапазоне.

В классе Class1 описан вспомогательный статический метод PrintArray, предназна­ченный для вывода массива на экран. В него передаются два параметра: строка заголовка header и массив. Количество элементов массива определяется внутри метода с помощью свойства Length. Таким образом, этот метод можно использо­вать для вывода любого целочисленного одномерного массива. Результат работы программы:

Исходный массив:

24 50 18 3 16 -7 9 -1 2

Упорядоченный массив:

-7 -1 3 9 16 18 24 50 5

Для того чтобы применять метод PrintArray к массивам, состоящим из элементов другого типа, можно описать его второй параметр как Array. Правда, при этом значение элемента массива придется получать с помощью метода GetValue, посколь­ку доступ по индексу для класса Array не предусмотрен. Обобщенный метод вы­вода массива выглядит так:

public static void PrintArray(string header, Array a)

{

Console.WriteLine(header);

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

Console.Write("\t" + a.GetValue(i));

Console.WriteLine();

}

В листинге 6.4 продемонстрировано применение элементов класса Array при ра­боте со ступенчатым массивом.

Листинг 6.4. Использование методов класса Array со ступенчатым массивом

namespace ConsoleApplication1

{

class Class1

{

static void Main()

{

int[][] a = new int[3][];

a[0] = new int [5] { 24, 50, 18, 3, 16 };

a[l] = new int [3] { 7, 9, -1 };

a[2] = new int [4] { 6, 15, 3, 1 };

Console.WriteLine("Исходный массив:");

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

{

for (int j = 0; j < a[i].Length; ++j)

Console.Write("\t" + a[i][j]);

Console.WriteLine();

Console.WriteLine(Array.IndexOf(a[0],18));

}

}

}

}

Обратите внимание на то, как внутри цикла по строкам определяется длина каж­дого массива. Результат работы программы:

Исходный массив:

24 50 18 3 16

7 9-1

6 15 3 1


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: