Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Реализация бинарного поиска в TObjectList с пользовательским компаратором в Delphi XE

Delphi , Компоненты и Классы , Коллекции

В данной статье мы рассмотрим реализацию бинарного поиска в TObjectList с пользовательским компаратором в Delphi XE.

Цель: бинарный поиск должен возвращать экземпляры в списке, которые соответствуют определенному параметру свойства.

Например, у нас есть класс TMyClass с полем Index типа integer:

TMyClass = class
  public
    Index: Integer;
  end;

Используя TObjectList, мы хотим выполнить бинарный поиск по значению поля Index:

var
  aMyClass: TMyClass;
  aMyClassRef: TMyClass;
  aMyObjectList: TObjectList<TMyClass>;
begin
  ...
  aMyClass.Index := 1;
  aMyObjectList.BinarySearch(aMyClass, aMyClassRef);
  ...
end;

Или, еще проще, выполнить поиск по значению поля Index напрямую:

begin
  ...
  aMyObjectList.BinarySearch(1, aMyClassRef);
  ...
end;

Мы хотим пройтись по списку и получить экземпляры TMyClass, у которых также Index == 1. В C++ перегрузка оператора '==' позволяет достичь этой цели. Но как это сделать в Delphi XE с TObjectList?

Для реализации бинарного поиска с пользовательским компаратором в Delphi XE нам нужно предоставить IComparer. Есть несколько способов это сделать, например, используя анонимную функцию:

var
  List: TObjectList<TMyClass>;
  Target: TMyClass;
  Index: Integer;
  Comparer: IComparer<TMyClass>;
  Comparison: TComparison<TMyClass>;
begin
  ...
  Comparison :=
    function(const Left, Right: TMyClass): Integer
    begin
      Result := ??; // ваше правило сравнения здесь
    end;
  Comparer := TComparer<TMyClass>.Construct(Comparison);
  List.BinarySearch(Target, Index, Comparer);
end;

Если вы не хотите использовать анонимную функцию, вы можете реализовать "Comparison" другим способом, например, в виде метода объекта, статической функции класса или даже обычной функции без ООП. Главное, чтобы сигнатура была такой же, как и у вышеприведенной функции.

При реализации функций сравнения возвращайте <0, если Left < Right, >0, если Left > Right, и 0, если Left = Right.

Надеемся, эта статья помогла вам разобраться с реализацией бинарного поиска в TObjectList с пользовательским компаратором в Delphi XE. Удачи в ваших проектах!

Создано по материалам из источника по ссылке.

В данной статье рассматривается реализация бинарного поиска в TObjectList с пользовательским компаратором в Delphi XE.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Коллекции ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-06-16 16:33:09/0.0030970573425293/0