![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Тот ещё
Старожил
Регистрация: 14.11.2007
Сообщений: 2,242
|
![]()
Не могу понять логику применения/использования IComparer<T> при работе с дженериками коллекций. При создании TList<ТAnyType> можно указать экземпляр интерфейса IComparer<T>. Таким образом, если для экземпляра какого-то типа/класса (ТAnyType) определена своя логика сравнения, то её можно передать в список. (если не определена, он, грубо говоря, будет сравнивать побайтно используя TComparer<T>.Default)
Допустим теперь, что мне нужно выбрать элементы из такого списка, сравнивая их с заданным. Т.е. Есть List = TList<ТAnyType> и есть Something = ТAnyType. И мне нужно, например, удалить из списка все элементы, которые меньше Something. НО! Тип ТAnyType разрабатываю не я и список List создаю не я. И мне не известно заранее имеет ли ТAnyType свой TComparer и назначен ли он при создании списка. Вопрос: Как из конкретного экземпляра TList<ТAnyType> вытащить его Comparer? Или я вообще не понимаю тут логигу использования IComparer<T>? Просто ну как-то странно, если для элементов вот конкретного списка есть конкретный алгоритм сравнения и о ней знает список, то почему бы списку не расшарить информацию об этом алгоритме? Зачем они его скрыли? Например я сижу в приёмной коммисии. Приходят и уходят соискатели на курсы (TCandidate). Есть список этих абитуриентов TEnrolleeList = TList<TCandidate>. Его создал декан и при создании указал каким именно способом сравнивать их между собой (в контексте конкретно этого списка) OurEntrants := TEnrolleeList.Create(TSpecEnrolleeC omparer). Я периодически сортирую список. При чём мне для этого не нужно знать метод сравнения. Тупо выполняю OurEntrants.Sort. Тут приводят несколько соискателей и спрашивают, у кого из них больше шансов поступить конкретно на наши курсы? А декана нет на месте и TSpecEnrolleeComparer в его кабинете под замком. Последний раз редактировалось Sibedir; 21.03.2023 в 10:29. |
![]() |
![]() |
![]() |
#2 |
Тот ещё
Старожил
Регистрация: 14.11.2007
Сообщений: 2,242
|
![]()
Вот и весь хрен до копейки. Скачал последнюю версию RAD
Код:
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Цикл foreach при работе с коллекциями и массивами | BadCats | C# (си шарп) | 9 | 10.09.2016 22:35 |
Математическая логика (Элементы теории множеств, Логика и исчисление высказываний) | sash_ok.83 | Фриланс | 0 | 12.06.2012 20:43 |
Логика в работе склада | Евгений_Магистр | БД в Delphi | 13 | 12.05.2012 08:08 |
C# интерфейс IComparer | ardor | Помощь студентам | 3 | 02.01.2011 18:21 |
Работа с коллекциями | ЯИмя | Microsoft Office Excel | 2 | 20.07.2008 01:23 |