Пример 2 . Сортировка и фильтрация
Рассматриваем набор продуктов. Задача состоит в том, чтобы отсортировать их по имени и найти самые дорогие товары.
Реализация (С# 1). Сортировка по названию
Используем метод ArrayList.Sort, который обеспечивает реализацию интерфейса ICompare.
Семантическая и синтаксическая конструкция в коде программы, используемая для специфицирования услуг, предоставляемых классом или компонентом.
Тип Product может реализовывать интерфейс IComparable, но в этом случае можно будет указать только один порядок сортировки. Поэтому отдельно будет записан интерфейс IComparer, который будет применятся для сортировки.
using System.Collections;
class ProductNameComparer:IComparer // интерфейс
{ //обязательно должен содержатьфункцию сравнения
public int Compare(object x, object y)
{
Product first = (Product)x;
Product second = (Product)y;
return first.Name.CompareTo(second.Name);
}
}
static void Main(string[] args)
{
ArrayList list = Product.GetSampleProducts();
foreach (Product product in list)
Console.WriteLine(product.ToString());
Console.WriteLine();
list.Sort(new ProductNameComparer());
foreach (Product product in list)
Console.WriteLine(product.ToString());
Console.Read();
}
Ограничения/недостатки:
Необходимо определить дополнительный тип, помогающий в сортировке.
В методе Compare вынуждены использовать приведение типов (cast) при преобразовании типа object в Product.