Console.WriteLine();
// Отсортировать массив.
Array.Sort(nums);
// Отобразить порядок следования после сортировки.
Console.Write('Порядок следования после сортировки: '); foreach(int i in nums)
Console.Write(i + ' ');
Console.WriteLine ();
// Найти значение 14.
int idx = Array.BinarySearch(nums, 14);
Console.WriteLine('Индекс элемента массива со значением 14: ' + idx) ;
}
}
Вот к какому результату приводит выполнение этой программы.
Исходный порядок следования: 54 63 14 98 17 124-10 Порядок следования после сортировки: - 101345689141724 Индекс элемента массива со значением 14: 9
В приведенном выше примере массив состоит из элементов типа int, который относится к категории типов значений. Все методы, определенные в классе Array, автоматически доступны для обработки массивов всех встроенных в C# типов значений. Но в отношении массивов ссылок на объекты это правило может и не соблюдаться. Так, для сортировки массива ссылок на объекты в классе типа этих объектов должен быть реализован интерфейс IComparable или IComparable<T>. Если же ни один из этих интерфейсов не реализован в данном классе, то во время выполнения программы может возникнуть исключительная ситуация в связи с попыткой отсортировать подобный массив или осуществить в нем поиск. Правда, реализовать оба интерфейса, IComparable и IComparable<T>, совсем нетрудно.
В интерфейсе IComparable определяется один метод.
int CompareTo(object
В этом методе значение вызывающего объекта сравнивается со значением объекта, определяемого параметром
Интерфейс IComparable<T> является обобщенным вариантом интерфейса IComparable. Поэтому в нем определен следующий обобщенный вариант метода CompareTo().
int CompareTo(Т
Обобщенный вариант метода CompareTo () действует аналогично необобщенному его варианту. В нем значение вызывающего объекта также сравнивается со значением объекта, определяемого параметром
// Отсортировать массив объектов и осуществить в нем поиск, using System;
class MyClass : IComparable<MyClass> { public int i;
public MyClass(int x) { i = x; }
// Реализовать интерфейс IComparable<MyClass>. public int CompareTo(MyClass v) { return i - v.i;
}
public bool Equals(MyClass v) { return i == v.i;
}
class SortDemo {
static void Main() {
MyClass[] nums = new MyClass[5];
nums[0] = new MyClass(5); nums[l] = new MyClass (2); nums[2] = new MyClass (3); nums[3] = new MyClass(4); nums[4] = new MyClass(1);
// Отобразить исходный порядок следования.
