Сортировка по набору критериев (IComparer)
Сортировка по набору критериев (IComparer)
В этой версии типа Car в качестве критерия упорядочения мы использовали ID автомобиля, В другом случае для сортировки можно использовать, например, petName (чтобы разместить автомобили в алфавитном порядке их названий). Но что делать, если нужно отсортировать автомобили и по значению ID, и по значению petName? В этом случае вы должны использовать другой стандартный интерфейс, определенный в рамках пространства имен System.Collections, – интерфейс IComparer.
// Типичный способ сравнения двух объектов.
interface IComparer {
int Compare(object o1, object o2);
}
В отличие от IComparable, интерфейс IComparer обычно реализуют не с помощью типов, которые предполагается сортировать (в данном случае это типы Car), а с помощью некоторого набора вспомогательных классов, по одному для каждого порядка сортировки (petName, ID и т.д.). Тип Car (автомобиль) уже "знает", как сравнивать себя с другими автомобилями на основе внутреннего идентификатора ID. Чтобы позволить пользователю объекта отсортировать массив типов Car по значению petName, нам потребуется вспомогательный класс, реализующий IComparer. Вот подходящий для этого программный код.
// Этот вспомогательный класс используется для сортировки
// массива объектов Car по названию.
using System.Collections;
public class PetNameComparer : IComparer {
public PetNameComparer() {}
// Проверка названий объектов.
int IComраrer.Compare(object o1, object o2) {
Car t1 = (Car)о1;
Car t2 = (Car)o2;
return String.Compare (t1.petName, t2.petName);
}
}
Этот вспомогательный класс можно использовать в программном коде пользователя объекта. Класс System.Array предлагает перегруженный метод Sort(), один из вариантов которого допускает использование объекта, реализующего интерфейс IComparer (рис. 7.11).
static void Main (string[] args) {
…
// Теперь сортируем по имени.
Array.Sort(myAutos, new РеtNameComparer());
// Вывод отсортированного массива.
Consolе.WriteLine(" Упорядочение по названию");
foreach(Car e in myAutos) Console.WriteLine("{0} {1}", c.ID, c.petName);
…
}

Рис. 7.11. Сортировка автомобилей по названию
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Сортировка
Сортировка В отличие от предыдущих версий в Проводнике Windows Vista заголовки столбцов, с помощью которых можно проводить сортировку объектов и другие действия, доступны при любом способе отображения значков.Щелчком кнопки мыши на заголовке любого столбца вы можете
Дополнительные нюансы по набору базы подписчиков
Дополнительные нюансы по набору базы подписчиков Скачайте эту интеллект-карту по адресу: http://smartinfomarketing.ru/book-leads.htmКоротко разберем дополнительные материалы по набору подписной базы.? Разместите всплывающие окна на каждом продающем сайте. Это увеличит количество
Сортировка
Сортировка Трудности? Это еще что такое? Однако бесплатный сыр сами знаете где. Дело в том, что, так как сами элементы в списке не хранятся, придется самим заботится о сортировке. Не удастся воспользоваться функцией CListCtrl::SortItems, бесполезно писать CompareItems и т.п. Все, что у вас
8.1.5. Сортировка массива
8.1.5. Сортировка массива Самый простой способ отсортировать массив — воспользоваться встроенным методом sort:words = %w(the quick brown fox)list = words.sort # ["brown", "fox", "quick", "the"]# Или отсортировать на месте:words.sort! # ["brown", "fox", "quick", "the"]Здесь предполагается, что все элементы массива сравнимы
Сортировка данных
Сортировка данных Рассмотрим еще раз функцию main( ): main( ){int numbers[MAXSIZE]; /* массив для ввода */int size; /* количество введенных элементов */size = getarray(numbers, MAXSIZE); /* помещает ввод в массив */sort(numbers, size); /* сортировка массива */printf(numbers, size); /* печать отсортированного
Пирамидальная сортировка
Пирамидальная сортировка После того, как мы реализовали очередь по приоритету в виде сортирующего дерева, можно утверждать, что такое дерево можно использовать как алгоритм сортировки: одновременно добавлять в сортирующее дерево ряд элементов, а затем выбирать их по
Поиск и сортировка
Поиск и сортировка Следующие библиотечные функции предназначены для поиска и сортировки в массиве: Функция Краткое описание bsearch выполняет двоичный поиск lfind выполняет линейный поиск для заданного значения lsearch выполняет линейный поиск для заданного значения,
Сортировка
Сортировка При преобразовании документа элементами xsl:for-each и xsl:apply-templates, выбранные узлы по умолчанию обрабатываются в порядке просмотра документа, который зависит от выражения, использованного в атрибуте select этих элементов. XSLT позволяет изменять этот порядок
Пять критериев
Пять критериев Чтобы обеспечить расширяемость (extendibility) и повторное использование (reusability), двух основных факторов качества, предложенных в лекции 1, необходима система с гибкой архитектурой, состоящая из автономных программных компонент. Именно поэтому в лекции 1 введен
Определение критериев выбора поставщика технологии или сервисов PKI
Определение критериев выбора поставщика технологии или сервисов PKI Эта лекция посвящена тем проблемам, которые необходимо рассмотреть перед развертыванием PKI. Ключ к принятию взвешенных решений - всестороннее изучение фактического состояния дел, а также требований