Примечание. Если вы заранее знаете, сколько элементов необходимо поместить :в список, установите в начале работы нужное значение в свойство Саpacity - это снизит

Если вы заранее знаете, сколько элементов необходимо поместить:в список, установите в начале работы нужное значение в свойство Саpacity - это снизит непроизводительные затраты времени на расширение списка.

Методы класса:
function Add(Item: Pointer): Integer; Добавляет элемент item в конец ci; Возвращает его индекс
procedure Clear; Очищает список, удаляя из него вес Не освобождает память, связанную удаленным элементом. Устанавлив: ства Count и Capacity значение 0
procedure Delete(Index:Integer); Удаляет из списка элемент с индекс все элементы, расположенные за удаляемым, смещаются на одну позицию вверх
class procedure Error(const Msg: Stringy; Data: Integer); virtual; Возбуждает исключение ElistErr метрами Msg и Data
procedure Exchange (Indexl, Index2:Integer); Меняет местами элементы с индексами index1 иI ndex2
function Expand: TList; Расширяет массив, увеличивая Capacity
function Extract(Item: Pointer): Pointer; Удаляет из списка элемент Item
function First: Pointer; Возвращает указатель на самый первый элемент списка
function IndexOf(Item:Pointer): Integer; Отыскивает в списке элемент Item и возвращает его индекс
procedure Insert(Index:Integer; Item: Pointer); Вставляет элемент Item в позицию Index списка: новый элемент получает индекс Index, все элементы с индексами Index и больше увеличивают свой индекс на 1. При необходимости расширяет список
function Last: Pointer; Возвращает указатель на последний элемент списка
procedure Move(Curlndex, Newlndex: Integers; Перемещает элемент в списке с позиции CurIndex в позицию Newlndex. Все элементы старого списка с индексами от Curlndex-1 до Newlndex уменьшают свой индекс на 1
procedure Pack; Упаковывает список: удаляет пустые элементы в конце массива индексов
function Remove(Item: Pointer): Integer; Отыскивает в списке элемент Item и удаляет его
procedure Sort(Compare: rListSortCompare); Сортирует коллекцию с помощью функции Compare

Методы Add и insert получают указатель на вставляемый элемент. Чтобы воспользоваться ими, программист должен сам разместить в куче данные и получить соответствующий указатель. Точно так же методы Delete, Remove и Сlear не уничтожают распределенные в памяти данные, которые программист должен, если это необходимо, уничтожить сам.

Например:

var
List: TList;
Item: Pointer;
Value: AnyType;


begin
List:= TList.Create; // Создаем список
Item:= New(Value); // Размещаем в куче данные
List.Add(Item); // Добавляем элемент к списку.....
List.Remove(Item); // Удаляем элемент из списка
Dispose(Item); // Удаляем его из кучи
List.Free; // Удаляем ненужный список
end;

Метод sort сортирует список по критерию, устанавливаемому функцией compary. Тип TListSortCompare определен следующим образом:

TListSortCompare = function(Iteml, Item2: Pointer): Integer;

Таким образом, функция compare получает указатели на два элемента списка. Результат сравнения:

· любое отрицательное число, если Item1 ^

· 0,если Item1 ^ = Item2^;

· любое положительное число, если Item1 ^ > Item2^.


Критерий сравнения данных устанавливается программистом и реализуется в функции Compare.

В следующем примере в список List помещается 20 случайных вещественных чисел, равномерно распределенных в диапазоне 0...1.

Список сортируется по возрастанию чисел и отображается в компоненте mmOutput (многострочный редактор из учебной формы fmExample).

type
PDouble = ^Double;
Function Comp(Iteml, Item2:. Pointer): Integer;
// С помощью этой функции реализуется сортировка чисел
begin
if PDouble(Iteml)^ < PDouble(Item2) ^ then
Result:= -1 else
if PDouble(Iteml^ > PDouble (Item2) ^ then
Result:= 1 else
Result:= 0
end;


procedure TfmExample.bbRunClick(Sender: TObject);
// Обработчик нажатий кнопки bbRun выполняет основную работу
var
k: Integer;
List: TList;
pD: PDouble;
begin
List:= TList.Create; // Создаем список
for k:= 1 to 20 do // Наполняем его
begin
New(pD); // Резервируем память
pD^:= Random; // Помещаем в нее случайное число
List.Add(pD); // Добавляем к списку
end;
List. Sort (Comp); // Сортируем список по возрастанию
mmOutput.Lines.Clear;
{ Очищаем редактор mmOutput. В следующем цикле наполняем mmOutput и уничтожаем элементы List }
for k:= 0 to List.Count-1 do
begin
pD:= List[k]; // Очередное число из списка
mmOutput. Lines.Add (FloatToStr (pD^);
{Помещаем в mmOutput}
Dispose(pD) // Уничтожаем число
end;
List.Free; // Уничтожаем список
end;


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: