Сортировка по набору критериев (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. Сортировка автомобилей по названию

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

Сортировка

Из книги Использование ListView в режиме виртуального списка автора Чадов Тимофей

Сортировка Трудности? Это еще что такое? Однако бесплатный сыр сами знаете где. Дело в том, что, так как сами элементы в списке не хранятся, придется самим заботится о сортировке. Не удастся воспользоваться функцией CListCtrl::SortItems, бесполезно писать CompareItems и т.п. Все, что у вас


Сортировка

Из книги Windows Vista автора Вавилов Сергей

Сортировка В отличие от предыдущих версий в Проводнике Windows Vista заголовки столбцов, с помощью которых можно проводить сортировку объектов и другие действия, доступны при любом способе отображения значков.Щелчком кнопки мыши на заголовке любого столбца вы можете


Пять критериев

Из книги Основы объектно-ориентированного программирования автора Мейер Бертран

Пять критериев Чтобы обеспечить расширяемость (extendibility) и повторное использование (reusability), двух основных факторов качества, предложенных в лекции 1, необходима система с гибкой архитектурой, состоящая из автономных программных компонент. Именно поэтому в лекции 1 введен


Определение критериев выбора поставщика технологии или сервисов PKI

Из книги Инфраструктуры открытых ключей автора Полянская Ольга Юрьевна

Определение критериев выбора поставщика технологии или сервисов PKI Эта лекция посвящена тем проблемам, которые необходимо рассмотреть перед развертыванием PKI. Ключ к принятию взвешенных решений - всестороннее изучение фактического состояния дел, а также требований


8.1.5. Сортировка массива

Из книги Программирование на языке Ruby [Идеология языка, теория и практика применения] автора Фултон Хэл

8.1.5. Сортировка массива Самый простой способ отсортировать массив — воспользоваться встроенным методом sort:words = %w(the quick brown fox)list = words.sort # ["brown", "fox", "quick", "the"]# Или отсортировать на месте:words.sort!       # ["brown", "fox", "quick", "the"]Здесь предполагается, что все элементы массива сравнимы


Сортировка

Из книги Технология XSLT автора Валиков Алексей Николаевич

Сортировка При преобразовании документа элементами xsl:for-each и xsl:apply-templates, выбранные узлы по умолчанию обрабатываются в порядке просмотра документа, который зависит от выражения, использованного в атрибуте select этих элементов. XSLT позволяет изменять этот порядок


Поиск и сортировка

Из книги Язык программирования Си для персонального компьютера автора Бочков C. О.

Поиск и сортировка Следующие библиотечные функции предназначены для поиска и сортировки в массиве: Функция Краткое описание bsearch выполняет двоичный поиск lfind выполняет линейный поиск для заданного значения lsearch выполняет линейный поиск для заданного значения,


Пирамидальная сортировка

Из книги автора

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


Сортировка данных

Из книги автора

Сортировка данных      Рассмотрим еще раз функцию main( ):  main(  ){int numbers[MAXSIZE]; /* массив для ввода */int size;     /* количество введенных элементов */size = getarray(numbers, MAXSIZE); /* помещает ввод в массив */sort(numbers, size); /* сортировка массива */printf(numbers, size); /* печать отсортированного


Дополнительные нюансы по набору базы подписчиков

Из книги автора

Дополнительные нюансы по набору базы подписчиков Скачайте эту интеллект-карту по адресу: http://smartinfomarketing.ru/book-leads.htmКоротко разберем дополнительные материалы по набору подписной базы.? Разместите всплывающие окна на каждом продающем сайте. Это увеличит количество