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

"Сортировка списка записей с использованием пользовательского сравнителя в Delphi"

Delphi , Базы данных , Сортировка и Фильтр

Сортировка списка записей с использованием пользовательского сравнителя в Delphi

В данной статье мы рассмотрим, как отсортировать список записей с использованием пользовательского сравнителя в Delphi. Для этого мы создадим простую запись и список на основе этой записи, а затем напишем пользовательскую функцию сравнения для сортировки списка по значению целого числа.

Создание записи и списка

Сначала создадим простую запись TMyRecord с полями str1, str2 и intVal:

type
  TMyRecord = record
    str1: string;
    str2: string;
    intVal: integer;
  end;

Затем создадим generic список TListMyRecord на основе нашей записи:

type
  TListMyRecord = TList<TMyRecord>;

Пользовательская функция сравнения

Теперь напишем пользовательскую функцию сравнения для сортировки списка по значению поля intVal. Функция должна принимать два параметра типа TMyRecord и возвращать значение типа Integer, которое будет использоваться для сравнения:

function CompareIntVal(const Left, Right: TMyRecord): Integer;
begin
  Result := Left.intVal - Right.intVal;
end;

Сортировка списка

Теперь можно отсортировать список MyList по значению поля intVal с помощью функции Sort и нашего пользовательского сравнителя CompareIntVal:

MyList.Sort(TComparer<TMyRecord>.Construct(CompareIntVal));

Пример кода

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

program SortListOfRecords;

{$APPTYPE CONSOLE}

uses
  System.SysUtils,
  Generics.Collections;

type
  TMyRecord = record
    str1: string;
    str2: string;
    intVal: integer;
  end;

  TListMyRecord = TList<TMyRecord>;

function CompareIntVal(const Left, Right: TMyRecord): Integer;
begin
  Result := Left.intVal - Right.intVal;
end;

var
  MyList: TListMyRecord;
  MyRecord: TMyRecord;
  i: Integer;

begin
  // Создание списка записей
  MyList := TListMyRecord.Create;

  // Добавление элементов в список
  for i := 0 to 9 do
  begin
    MyRecord.str1 := 'String ' + IntToStr(i);
    MyRecord.str2 := 'Another string';
    MyRecord.intVal := i;
    MyList.Add(MyRecord);
  end;

  // Сортировка списка по значению поля intVal с помощью пользовательского сравнителя
  MyList.Sort(TComparer<TMyRecord>.Construct(CompareIntVal));

  // Вывод отсортированного списка
  for i := 0 to MyList.Count - 1 do
    Writeln(MyList[i].str1, ' ', MyList[i].intVal);

  // Освобождение ресурсов
  MyList.Free;
  Readln;
end.

После запуска этой программы вы увидите отсортированный список записей, основанный на значении поля intVal.

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

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


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

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




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


:: Главная :: Сортировка и Фильтр ::


реклама


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

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 11:32:33/0.0056259632110596/1