Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.03.2023, 10:03   #1
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,281
По умолчанию Какова логика использования IComparer<T> при работе с коллекциями?

Не могу понять логику применения/использования 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.
Sibedir вне форума Ответить с цитированием
Старый 26.03.2023, 10:22   #2
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,281
По умолчанию

Вот и весь хрен до копейки. Скачал последнюю версию RAD
Код:
  TList<T> = class(TEnumerable<T>)
...
  public
...
    property Items[Index: Integer]: T read GetItem write SetItem; default;
    property List: arrayofT read GetList;
    property PList: ParrayofT read GetPList;
    property Comparer: IComparer<T> read FComparer;
...
  end;
Парам-парам-пам. Пам.
Sibedir вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Цикл 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