КЛАСС TLIST (СПИСОК)Словарь терминовПомощь


Оглавление:

1. Определение TList.
2. Свойства
3. Методы
4. Примечания
5. Пример
6. Литература

Класс TList позволяет создать набор из произвольного количества элементов и организовать индексный способ доступа к ним, как это делается при работе с массивом. Списки отличаются от массивов. Во-первых, их размер динамически меняться в ходе работы программы, фактически ограничиваясь лишь доступной памятью. Во-вторых, в списках могут храниться элементы разных типов, например наследованных от TObject.
Технически списки представляют собой массивы нетипизированых указателей на размещенные в динамической памяти элементы. Эти массивы размещаются в
куче, что даёт возможность динамического изменения размеров списков; с другой стороны, входящие в списки нетипизированные указатели позволяют ссылаться на элементы произвольного типа.

TList позволяет:

В начало

Свойства элемента TList (property):

Свойство Тип Назначение
Capacity Integer "Застолбить" память под некоторое количество указателей. Всегда больше Count
Count Integer Показывает количество элементов в списке
Items Array[x]:Pinter Доступ к отдельным элементам в списке по их индексам. Индексы нумеруются с нуля
List PPointerList Возвращает адрес массива указателей на элементы списка

В начало

Методы элемента TList (methods):

Метод Параметры Назначение
Add Item : Pointer Добавляет в конец списка элемент. Возвращает его индекс
Clear - - - Очищает список. Сами элементы не удаляет, удаляет лишь указатели на них
Delete Index : Integer Удаляет элемент с индексом Index, cсдвигая остальные на его место
Destroy - - - Удаляет образец TList. Для внутреннего использования
Error (см. документацию) Вызывает исключительную ситуацию EListError
Exchange Index1 , Index2 : Integer Меняет местами элементы соответственных индексов
Expand - - - Увеличивает capacity
Extract Item : Pointer Удаляет элемент из списка
First - - - Возвращает ссылку на первый элемент в списке
IndexOf Item : Pointer Возвращает индекс данного элемента (если Item не найден, то возвращает nil)
Insert Index : Integer; Item : Pointer Вставляет элемент в определённую позицию в списке, "раздвигая" массив
Last - - - Возвращает ссылку на последний элемент в списке
Move CurIndex , NewIndex : Integer Перемещает элемент из CurIndex в NewIndex
Pack - - - Удаляет все указатели на nil из списка
Remove Item : Pointer Удаляет первый совпавший элемент из списка. Возвращает номер удалённого элемента
Sort Compare : TListSortCompare Сортирует список. Критерий сортировки определяет функция Compare

Остальные методы наледуются от TObject. Они подробно описаны в справочной системе Delphi.

В начало

Примечания:

Следует учесть, что свойство Соunt определяет количество помещенных в список элементов, в то время как Сарасitу - текущую ёмкость списка. Если при добавлении очередного элемента обнаруживается, что емкость списка исчерпана, происходит наращивание ёмкости на фиксированную величину (для Соunt < 5 - на 4 элемента, для Соunt < 8 - на 8, для Соunt > 7 - на 16). При этом сначала резервируется память для размещения расширенного массива указателей, затем в нее копируется содержимое старого массива, после чего старый массив указателей уничтожается (занимаемая им память возвращается Windows). Если вы заранее знаете, сколько элементов необходимо поместить в список, установите в начале работы нужное значение в свойство Сарасitу - это снизит непроизводительные затраты времени на расширение списка.

Тип pPointerList объявлен как:

type

pPointerList = ^TPointerList;
TPointerList = array [0..MaxListSize] of Pointer;

В начало

Пример использования TList

procedure ListExample;
var

List: TList;
Item: Pointer;
Value: Real;

begin

List := TList.Create; {создать список}
Item := New(Value); {занести в кучу данные}
List.Add(Item); {добавить в список ссылку на элемент}
{какие-нибудь другие интсрукции}
List.Remove(Item); {удалить элемент из списка}
Dispose(Item); {удалить элемент из кучи}
{какие-нибудь другие интсрукции}
List.Free; {ликвидировать сам список}

end;

В начало