Иллюстрированный самоучитель по Delphi 7 для профессионалов

Класс TStringList

Свойство:

property Duplicates: TDuplicates;

Определяет, можно ли добавлять в список повторные значения.

Тип:

type
TDuplicates = (duplgnore, dupAccept, dupError);

Определяет реакцию списка на добавление повторного элемента:

  • dupignore – запрещает добавление повторных элементов;
  • dupAccept – разрешает добавление повторных элементов;
  • dupError – запрещает добавление повторных элементов и генерирует исключительную ситуацию.

Класс TStringList немыслимо представить себе без возможностей сортировки. Если вас удовлетворит обычная сортировка, то для этого можно использовать свойство sorted (сортировка выполняется при значении True) или метод Sort. Под "обычной" имеется в виду сортировка по тексту строк с использованием функции Ansicomparestr (т. е. с учетом национальных символов, в порядке возрастания). Если вы хотите отсортировать список по другому критерию, к вашим услугам метод:

type
TStringListSortCompare = function(List: TStringList; Indexl, Index2: Integer): Integer;
procedure CustomSort(Compare: TStringListSortCompare);

Чтобы отсортировать список, вы должны описать функцию сравнения двух элементов с индексами index1 и index2, которая должна возвращать следующие результаты:

  • 1 – если элемент с индексом index1 вы хотите поместить впереди элемента Index2;
  • 0 – если они равны;
  • 1 – если элемент с индексом index1 вы хотите поместить после элемента Index2.

Для описанного выше примера с объектом-городом нужны три процедуры:

function SortByStatus(List: TStringList; Indexl, Index2: Integer):
Integer;
begin
Result: = AnsiCompareStr((List.Objects[Indexl] as TCityProps).Status,
(List.Objects[Index2] as TCityProps).Status;
end;
function SortBySquare(List: TStringList; Indexl, Index2: Integer): Integer;
begin if (List.Objects[Indexl] as TCityProps).Square <
(List.Objects[Index2] as TCityProps). Square) then Result: = -1
else if (List.Objects[Indexl] as TCityProps).Square =
(List.Objects[Index2] as TCityProps).Square then Result: = 0
else Result: = 1;
end;
function SortByPopulation(List: TStringList; Indexl, Ir.dex2: Integer): Integer;
begin
if (List.Objects[Indexl] as TCityProps).Population < (List.Objects[Index2] as TCityProps).
 Population then Result: = -1
else
if (List.Objects[Indexl] as TCityProps). Population = (List.Objects[Index2] as TCityProps).
 Population
then Result: = 0
else Result: = 1;
end;

Передаем одну из процедур в метод CustomSort:

Cities.CustomSort(SortByPopulation);

Для поиска нужного элемента используется метод:

function Find(const S: string; var Index: Integer): Boolean;

В параметре s передается значение для поиска. В случае успеха функция возвращает значение True, а в параметре index содержится индекс найденного элемента.

Метод:

function IndexOf (const S: string): Integer;

Возвращает индекс найденного элемента s. Иначе функция возвращает -1.

Метод:

function IndexOfName(const Name: string): Integer;

Возвращает индекс найденного элемента, для которого свойство Names совпадает со значением параметра Name.

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