Применение метода Array.Sort ()
В следующей программе две функции сравнения реализованы в виде статических методов класса, где размещен метод Main (). Первая функция even_odd () проверяет четность своих параметров и возвращает +1, если первый параметр нечетный, а второй — четный. При равенстве параметров возвращается 0, а при ложности обоих условий возвращается -1. Результат -1 означает, что первый параметр четный — его никуда… Читать ещё >
Применение метода Array.Sort () (реферат, курсовая, диплом, контрольная)
Несмотря на то, что обоснования возможности использования имени метода в качестве аргумента другого метода будут рассмотрены только в главе, посвященной делегатам, уже сейчас полезно научиться применять собственные методы для «настройки» некоторых методов библиотечных классов. Сделаем это на примере очень полезного метода Array. Sort (), который мы упомянули в гл. 7. Это статический метод, упорядочивающий (сортирующий) элементы массива. Этот метод перегружен, и в классе Array определены 17 методов SortQ с разными сигнатурами. Тривиальный вариант метода SortQ имеет только один параметр типа Array. Так как все типы массивов являются наследниками класса Array, то в качестве аргумента при обращении к методу сортировки допустимо использовать ссылку на любой одномерный массив (имеется в виду одномерный массив с элементами любых типов). Метод Sort () упорядочивает значения элементов массива в соответствии с их типом. Массивы с элементами арифметических типов упорядочиваются по возрастанию значений, строки сортируются лексикографически и т. д.
Такое «поведение» метода Sort () с одним параметром очень полезно, но этого зачастую недостаточно для конкретных задач. Рассмотрим еще один вариант метода сортировки, в котором после ссылки на сортируемый массив в качестве второго аргумента применяется имя функции, задающей правило сравнения элементов. Напомним, что функция в C# — это метод, возвращающий значение, отличное от void. Такую функцию для правила сравнения программист-пользователь должен написать самостоятельно по следующей схеме.
int имя_функции (тип параметр1, тип параметр2)
(
if(условие 1) return +1; // нарушен порядок
if (условие 2) return -1; // порядок соблюден
return 0; // безразличие
У
Имя_функции выбирается произвольно. Тип возвращаемого значения int, тип параметров должен быть тем же, что и у элементов сортируемого массива. Условия 1 и 2 — логические выражения, в которые входят параметры 1 и 2. Обычно это отношения между параметрами.
Получив в качестве аргумента имя такой функции, метод Sort () применяет ее для принятия решения об относительной упорядоченности пар элементов сортируемого массива. Делается это приблизительно (мы ведь не знаем алгоритма работы метода Sort ()) так. Если результат равен 0, то сравниваемые элементы равнозначны, их не нужно менять местами. Если результат равен +1, то первый параметр должен быть помещен после второго. При результате -1 первый параметр должен размещаться до второго.
В следующей программе две функции сравнения реализованы в виде статических методов класса, где размещен метод Main (). Первая функция even_odd () проверяет четность своих параметров и возвращает +1, если первый параметр нечетный, а второй — четный. При равенстве параметров возвращается 0, а при ложности обоих условий возвращается -1. Результат -1 означает, что первый параметр четный — его никуда не нужно перемещать. Таким образом, функция «приказывает» методу Array. Sort () так поместить элементы массива, чтобы вначале находились четные, а за ним — нечетные значения.
Вторая функция drop () «настраивает» метод сортировки на упорядочение массива по убыванию значений его элементов. Значение +1 возвращается в том случае, если первый параметр меньше второго.
В методе Main () определен и инициализирован целочисленный массив, который трижды сортируется методами SortQ. Первый раз по четности, второй раз по возрастанию, третий раз по убыванию значений элементов. После каждой сортировки выводятся значения элементов на консольный экран. Текст программы и полученные результаты поясняют сказанное.
// 0918.cs — применение метода Array. Sort () using System; class Program {.
static int even_odd (int x, int у) // no четности
{
if (x % 2 ≠ 0 & у % 2 == 0) return 1; if (x == y) return 0; return -1;
}
static int drop (int x, int у) // no убыванию
{
if (x < y) return 1; if (x == y) return 0; return -1;
}
static void Main ().
{
int [ ] ar = { 4, 5, 2, 7, 8, 1, 9, 3 };
Array.Sort (ar, even_odd); // no четности
foreach (int memb in an).
Console.Write («{0} «, memb);
Console.WriteLine ();
Array.Sort (ar); // no умолчанию — no возрастанию foreach (int memb in ar).
Console.Write («{0} «, memb);
Console.WriteLineQ;
Array.Sort (ar, drop); // no убыванию foreach (int memb in ar).
Console.Write («{0} «, memb);
Console.WriteLineQ;
} }
Результат выполнения программы:
- 82 439 175
- 12 345 789
- 98 754 321