Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Сортировка

Читайте также:
  1. П. Медицинская сортировка и этапное лечение.
  2. Сортировка бинарными вставками
  3. Сортировка блоков данных в запросе
  4. Сортировка данных
  5. Сортировка данных
  6. Сортировка данных в EXСEL

Класс List<T> позволяет сортировать элементы. Для метода Sort() определено несколько перегрузок. Ему могут быть переданы аргументы — обобщенный делегат Comparison<Т>, обобщенный интерфейс IComparer<T>, либо диапазон вместе с обобщенным интерфейсом IComparer<T>:

 

public void List<T>.Sort();

public void List<T>.Sort(Comparison<T>);

public void List<T>.Sort(IComparer<T>);

public void List<T>.Sort(Int32, Int32, ICoraparer<T>);

 

Метод Sort() без аргументов допускается только тогда, когда элементы в коллекции реализуют интерфейс IComparable.

Comparison<T> — это делегат для метода, который имеет два параметра типа Т и возвращает тип int. Если значения параметров равны, возвращается ноль, если первый параметр меньше второго, должно быть возвращено значение меньше нуля; в противном случае возвращается значение больше нуля.

В простой реализации метода сравнения можно использовать анонимный метод, следующем примере имеем два объекта (st1, st2) типа Student, у которых сравниваются свойства FullName с помощью строкового метода CompareTo():

 

students.Sort(delegate(Student st1, Student st2) {return st1.FullName.CompareTo(st2.FullName);});

 

При вызове этого метода весь список гонщиков сортируется по их именам (рис. 7.3).

Вместо применения делегата для сортировки коллекции также может быть применен интерфейс IComparer<T>.

Класс StudentComparer реализует интерфейс IComparer<T> для типа Student. Этот класс позволяет отсортировать коллекцию как по имени студента, так и номеру группы.

 

Рис. 7.3. Результаты сортировки студентов по имени

Вариант выбора сортировки по имени или группе определяется вложеным перечислимым типом CompareType. Значение CompareType передается конструктору класса StudentComparer. Интерфейс IComparer < Student > определяет метод Compare, используемый при сортировке. В реализации этого метода применяется метод CompareTo() класса String — либо по имени студента, либо по номеру группы:

 

class StudentComparer: IComparer<Student>

{

public enum CompareType

{

FullName,

Group

}

private CompareType compareType;

public StudentComparer(CompareType compareType)

{

this.compareType = compareType;

}

public int Compare(Student st1, Student st2)

{

int result = 0;

switch (compareType)

{

case CompareType.FullName:

result = st1.FullName.CompareTo(st2.FullName);

break;

case CompareType.Group:

result = st1.Group.CompareTo(st2.FullName);

break;

}

return result;

}

}

 

Когда сортируется коллекция студентов, методу Sort() передается новый экземпляр класса StudentComparer, и в следующем примере сортировка выполняется по номерам групп:

 

students.Sort(new StudentComparer(StudentComparer.CompareType.Group));

 

При вызове этого метода весь список студентов сортируется по учебной группк (рис. 7.4).

 

Рис. 7.4. Результаты сортировки студентов по группе


Дата добавления: 2015-07-07; просмотров: 135 | Нарушение авторских прав


Читайте в этой же книге: Повторное использование двоичного кода | Обзор обобщенных коллекций | Создание пользовательских обобщенных классов | Обобщенные методы | Обобщенные делегаты |
<== предыдущая страница | следующая страница ==>
Поиск элементов| Преобразования типов

mybiblioteka.su - 2015-2024 год. (0.007 сек.)