Сортировка и поиск. Статические методы класса Array

Статические методы класса Array позволяют решать самые разнообразные задачи:

  1. Copy - позволяет копировать весь массив или его часть в другой массив.
  2. IndexOf, LastIndexOf - определяют индексы первого и последнего вхождения образца в массив, возвращая -1, если такового вхождения не обнаружено.
  3. Reverse - выполняет обращение массива, переставляя элементы в обратном порядке.
  4. Sort - осуществляет сортировку массива.
  5. BinarySearch - определяет индекс первого вхождения образца в отсортированный массив, используя алгоритм двоичного поиска.

Все методы перегружены и имеют ряд модификаций. Большинство из этих методов применимо только к одномерным массивам. Приведу примеры различных операций, доступных при работе с массивами, благодаря наследованию от класса Array:

public void TestCollection(){ //операции над массивами int nc = 7; int[] col1 = new int[nc], col2 = new int[nc]; double[] col3 = new double[nc]; int[,] col4 = new int[2,2];
Arrs.CreateCollection(col1); Arrs.PrintCollection("col1",col1); Arrs.CreateCollection(col2); Arrs.PrintCollection("col2",col2); Arrs.CreateCollection(col3); Arrs.PrintCollection("col3",col3); Arrs.CreateTwoDimAr(col4); Arrs.PrintCollection("col4",col4); //сортировка, поиск, копирование // поиск элемента int first = Array.IndexOf(col1, 2); int last = Array.LastIndexOf(col1,2); if (first == -1) Console.WriteLine("Нет вхождений 2 в массив col1"); else if (first ==last) Console.WriteLine("Одно вхождение 2 в массив col1"); else Console.WriteLine("Несколько вхождений 2 в массив col1"); //first = Array.IndexOf(col4, 4); //только одномерный массив Array.Reverse(col1); Console.WriteLine("Обращение массива col1:"); Arrs.PrintCollection("col1",col1); //Копирование Array.Copy(col1, col3, col1.Length); Console.WriteLine(" Массив col3 после копирования массива col1:"); Arrs.PrintCollection("col3",col3); Array.Copy(col1,1,col2,1,2); Console.WriteLine("копирование двух элементов col1 в col2:"); Arrs.PrintCollection("col1",col1); Arrs.PrintCollection("col2",col2); //быстрая сортировка Хоара Array.Sort(col1); Console.WriteLine("Отсортированный массив col1:"); Arrs.PrintCollection("col1",col1); first = Array.BinarySearch(col1, 2); Console.WriteLine("Индекс вхождения 2 в col1: {0}",first); //Создание экземпляра (массива) Array my2Dar = Array.CreateInstance(typeof(double), 2,3); Arrs.PrintCollection("my2Dar",my2Dar); //клонирование my2Dar = (Array)col4.Clone(); Console.WriteLine("Массив my2Dar после клонирования col4:"); Arrs.PrintCollection("my2Dar",my2Dar); //копирование CopyTo col1.CopyTo(col2,0); Console.WriteLine("Массив col2 после копирования col1:"); Arrs.PrintCollection("col2",col2);}

В этой процедуре продемонстрированы вызовы различных статических методов класса Array. Для метода Copy показан вызов двух реализаций этого метода, когда копируется весь массив и часть массива. Закомментированный оператор вызова метода IndexOf

напоминает о невозможности использования методов поиска при работе с многомерными массивами. Приведу результаты вывода, порожденные этим кодом

Сортировка и поиск. Статические методы класса Array - student2.ru

Рис. 12.3. Результаты применения статических методов класса Array

12. Лекция: Класс Array и новые возможности массивов

12.3

Таблица 12.1. Свойства класса Array
Свойство Родитель Описание
IsFixedSize Интерфейс IList True, если массив статический
IsReadOnly Интерфейс IList Для всех массивов имеет значение false
IsSynchronized Интерфейс ICollection True или False, в зависимости от того, установлена ли синхронизация доступа для массива
SyncRoot Интерфейс ICollection Собственный метод синхронизации доступа к массиву. При работе с массивом его можно закрыть на время обработки, что запрещает его модификацию каким-либо потоком: Array myCol = new int[];lock( myCol.SyncRoot ) {foreach ( Object item in myCol ){// безопасная обработка массива }
Length   Число элементов массива
Rank   Размерность массива
Таблица 12.2. Статические методы класса Array
Метод Описание
BinarySearch Двоичный поиск. Описание и примеры даны в тексте
Clear Выполняет начальную инициализацию элементов. В зависимости от типа элементов устанавливает значение 0 для арифметического типа, false - для логического типа, Null для ссылок, "" - для строк.
Copy Копирование части или всего массива в другой массив. Описание и примеры даны в тексте
CreateInstance Класс Array, в отличие от многих классов, может создавать свои экземпляры не только с помощью конструктора new, но и при вызове метода CreateInstance: Array my2Dar = Array.CreateInstance(typeof(double), 2,2)
IndexOf Индекс первого вхождения образца в массив. Описание и примеры даны в тексте
LastIndexOf Индекс последнего вхождения образца в массив. Описание и примеры даны в тексте
Reverse Обращение одномерного массива. Описание и примеры даны в тексте
Sort Сортировка массива. Описание и примеры даны в тексте
       

Наши рекомендации