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

Сортировка TStringList в неалфавитном порядке в Delphi

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

Сортировка TStringList в неалфавитном порядке в Delphi

Иногда может понадобиться отсортировать TStringList не в стандартном алфавитном порядке, а в каком-либо другом, специфическом для вашего приложения. В этой статье мы рассмотрим, как это сделать в Delphi.

Задача

Допустим, у вас есть TStringList, содержащий строки 'A', 'B', 'C', 'D', 'E', 'F', 'G', и вам нужно отсортировать его не в алфавитном порядке 'A', 'B', 'C', ..., а в порядке 'B', 'C', 'A', ..., 'G', 'F', 'E'.

Решение

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

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

Вот пример кода, который решает нашу задачу:

program NonAlphabeticSort;

{$APPTYPE CONSOLE}

uses
  System.SysUtils,
  System.Classes;

const
  Order: array[0..6] of Char = ('B', 'C', 'A', 'D', 'G', 'F', 'E');

function GetStringOrder(const S: string; CaseSensitive: Boolean): Integer;
begin
  for Result := 0 to High(Order) do
    if (CaseSensitive and (CompareText(Order[Result], S) = 0)) or
       (not CaseSensitive and (CompareText(Order[Result], S) = 0)) then
    begin
      Exit(Result);
    end;
  Result := High(Order) + 1;
end;

function MyCompareStrings(List: TStringList; Index1, Index2: Integer): Integer;
begin
  Result := GetStringOrder(List[Index1], List.CaseSensitive) -
            GetStringOrder(List[Index2], List.CaseSensitive);
end;

var
  List: TStringList;
begin
  List := TStringList.Create;
  try
    List.CommaText := 'A,G,a,C,B,b,F,a,B,C,c,D,d,E,D,F,G,C,A,G,d,e,f,g';
    List.CaseSensitive := True;
    List.CustomSort(MyCompareStrings);
    for i := 0 to List.Count - 1 do
      Writeln(List[i]);
  finally
    List.Free;
  end;
  Readln;
end.

В этом примере мы сначала объявляем константный массив Order, содержащий нужный нам порядок. Затем мы определяем функцию GetStringOrder, которая находит индекс заданной строки в массиве Order. Функция MyCompareStrings использует GetStringOrder для сравнения индексов двух строк и возвращает результат, основанный на разнице этих индексов.

Наконец, мы создаем TStringList, заполняем его данными, устанавливаем флаг CaseSensitive в True (если нам нужна чувствительность к регистру), вызываем CustomSort с нашей функцией сравнения и выводим отсортированный список на экран.

Вывод

Использование CustomSort и своей функции сравнения позволяет сортировать TStringList в неалфавитном порядке в Delphi. В данном примере мы использовали предопределенный порядок, но вы можете адаптировать этот подход для любых других нужных вам порядков сортировки.

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

В этом контексте описывается, как отсортировать TStringList в неалфавитном порядке в Delphi с помощью метода CustomSort и функции сравнения, которая возвращает результат на основе индексов в предопределенном массиве.


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

Получайте свежие новости и обновления по 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:36:39/0.0056910514831543/1