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

Поиск элементов

Читайте также:
  1. А) Порядок элементов (индивидов или групп) в социальной структуре
  2. Аттестация и присвоение персональных поисковых званий
  3. Базы данных, информационно-справочные и поисковые системы
  4. В остальных случаях, Представитель не участвует в поиске новых клиентов, но может отправлять ссылку на свой магазин клиентам, который будет доступен для заказа.
  5. В поисках Божественного вдохновения
  6. В поисках законов реальности
  7. В поисках названия

В этом примере мы найдем всех студентов в коллекции, которые учатся в группе 321.

Класс List<T> представляет методы Find( ) и FindAll( ) со следующими объявлениями:

 

public T Find(Predicate<T> match);

public List<T> FindAll(Predicate<T> match);

 

Оба метода требуют аргумента Predicate<T>. Тип Predicate<T> является делегатом, который ссылается на метод-предикат. Предикат — это метод, возвращающий булевское значение. Если предикат возвращает true, значит соответствие обнаружено и элемент найден. Если он возвращает false, то элемент не добавляется к результату поиска. В соответствии со своим определением, Predicate<T> должен иметь единственный аргумент типа Т. Метод Find( ) возвращает первый элемент, соответствующий предикату, a FindAll( ) — все соответствующие предикату элементы в списке-коллекции.

Итак, нам нужно определить предикат. Мы используем метод предиката StudentPredicate( ) для поиска студентов, обучающихся в определенной группе. Метод определен в классе FindStudent, который инициализируется номером студенческой группы. StudentPredicate( ) принимает объект Student, сравнивает группу студента с той, что была задана в аргументе конструктора, и возвращает true или false:

 

class FindStudent

{

private string group;

public FindStudent(string group)

{

this.group = group;

}

public bool StudentPredicate(Student student)

{

return student.Group == group;

}

}

 

Чтобы найти нужных студентов, класс FindStudent инициализируется номером группы — 321, поскольку нам нужны студенты, которые учатся в группе 321. Методом FindAll( ) класса List<T> создается новый экземпляр делегата предиката, и этот делегат принимает метод finder.StudentPredicate. FindAll( ) возвращает список типа List<Student>, который используется в цикле foreach для итерации по всем найденным гонщикам и выдачи их на консоль:

 

FindStudent finder = new FindStudent("321");

 

foreach (Student st in students.FindAll(new Predicate<Student>(finder.StudentPredicate)))

Console.WriteLine(st);

 

Результат работы программы приведен на рис. 7.2 .

 

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


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


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

mybiblioteka.su - 2015-2021 год. (0.012 сек.)