Содержимое массива нередко приходится сортировать. Для этой цели в классе Array предусмотрен обширный ряд сортирующих методов. Так, с помощью раз ных вариантов метода Sort можно отсортировать массив полностью или в задан ных пределах либо отсортировать два массива, содержащих соответствующие пары "ключ-значение". После сортировки в массиве можно осуществить эффективный по иск, используя разные варианты метода BinarySearch. В качестве примера ниже приведена программа, в которой демонстрируется применение методов Sort и BinarySearch для сортировки и поиска в массиве значений типа int. // Отсортировать массив и найти в нем значение. using System; class SortDemo { static void Main { int[] nums = { 5, 4, 6, 3, 14, 9, 8, 17, 1, 24, -1, 0 }; // Отобразить исходный порядок следования. Console.Write("Исходный порядок следования: "); foreach(int i in nums) Console.Write(i + " "); 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); } }
Вот к какому результату приводит выполнение этой программы. Исходный порядок следования: 5 4 6 3 14 9 8 17 1 24 -1 0 Порядок следования после сортировки: -1 0 1 3 4 5 6 8 9 14 17 24 Индекс элемента массива со значением 14: 9
В приведенном выше примере массив состоит из элементов типа int, который от
носится к категории типов значений. Все методы, определенные в классе Array, авто
матически доступны для обработки массивов всех встроенных в C# типов значений.
Но в отношении массивов ссылок на объекты это правило может и не соблюдаться.
Так, для сортировки массива ссылок на объекты в классе типа этих объектов должен
быть реализован интерфейс IComparable или IComparable. Если же ни один из
этих интерфейсов не реализован в данном классе, то во время выполнения программы
может возникнуть исключительная ситуация в связи с попыткой отсортировать по
добный массив или осуществить в нем поиск. Правда, реализовать оба интерфейса,
IComparable и IComparable
В интерфейсе IComparable определяется один метод. int CompareTo(object obj)
В этом методе значение вызывающего объекта сравнивается со значением объекта, определяемого параметром obj. Если значение вызывающего объекта больше, чем у объекта obj, то возвращается положительное значение; если оба значения равны — нулевое значение, а если значение вызывающего объекта меньше, чем у объекта obj, — отрицательное значение.
Интерфейс IComparable является обобщенным вариантом интерфейса IComparable. Поэтому в нем определен следующий обобщенный вариант метода CompareTo. int CompareTo(Т other)