Delphi-Help

TList

Печать
Рейтинг пользователей: / 0
ХудшийЛучший 

TList

Описание

type TList;

Класс TList очень полезный универсальный контейнер списков. Он отличается от массивов, в которых он обеспечивает более богатые функциональные возможности.

В частности объекты TList могут быть отсортированы. Эта сортировка может быть с использованием любых выбранных критериев. Например, список может содержать набор объектов, которые имеют строку и численные поля. Вы можете отсортировать список по строке, по числу, по обоим, с возрастанием или убыванием, как Вы желаете. И пересортировать позже по другим критериям.

Показанный пример кода показывает такую сортировку.

Ключевые свойства и методы упомянуты ниже.

Свойство Capacity

Используется для установления размера (число указателей на объекты) списка. Предварительно установив в разумное значение, можно избежать множественных перераспределений памяти.

Свойство Count

Число элементов (указателей) в списке. Может быть прочитано или записано. Если размер уменьшен в результате изменения значения Count, то удаляются элементы в конце списка.

Свойство Items

Позволяет обращаться к элементам в списке. Например, myList.Items[2] ; возвращает 3-ий элемент в списке. Это свойство, заданное по умолчанию, вышеупомянутое может быть упрощено до myList[2];.

Свойство List

Возвращает элементы в массиве.

Метод Add

Добавляет элемент в конец списока.

Метод Assign

Заменяет список содержанием другого списка.

Метод Clear

Удаляет все элементы списка, устанавливая Count в 0.

Метод Delete

Удаляет элемент из списка по его позиции в списке.

Метод Remove

Удаляет элемент из списка по его объектному указателю.

Метод Exchange

Меняет позиции двух элементов

Метод Move

Перемещает элемент в новую позицию списка.

Метод Insert

Вставляет новый элемент в список в данную позицию.
Метод First

Получает первый элемент в списке.

Метод Last

Получает последний элемент в списке.

Метод Sort

Сортирует список в соответствии с вашими указанными критериями. Сортировка списка проводится внутри TList, но каждая пара элемента сравнивается, вызывая функцию, которую вы указали для этого метода.

Метод IndexOf

Выдает позицию указанного объекта в списке.

Пример кода

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
// Определение класса клиента
TCustomer = class
private
// Поля данных этого нового класса
CustomerName   : String;
CustomerNumber : Integer;

public
// Свойства для чтения значений этих данных
property Name : String
read CustomerName;
property Number : Integer
read CustomerNumber;

// Коструктрор
constructor Create(const CustomerName   : String;
const CustomerNumber : Integer);
end;

// Определение класса формы
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);

private
// TList объект мы использует в этом коде
myList : TList;

// Метод для показа содержимого нашего объекта списка
procedure ShowListContents;

public

end;

var
Form1: TForm1;

implementation

{$R *.dfm}


// Конструктор Customer
// --------------------------------------------------------------------------
constructor TCustomer.Create(const CustomerName   : String;
const CustomerNumber : Integer);
begin
// Сохранение переданных параметров
self.CustomerName   := CustomerName;
self.CustomerNumber := CustomerNumber;
end;


// Программа сортировки TList : сравните клиентов по имени
// --------------------------------------------------------------------------
// Возвращенное целое число имеет следующее значение :
//
//   > 0 : (положительное) Item1 является меньше чем Item2
//     0 : Item1 равно Item2
//   <0 : (negative) больше чем item2
function compareByName(Item1 : Pointer; Item2 : Pointer) : Integer;
var
customer1, customer2 : TCustomer;
begin
customer1 := TCustomer(Item1);
customer2 := TCustomer(Item2);

// Теперь сравнение строк
if      customer1.Name > customer2.Name
then Result := 1
else if customer1.Name = customer2.Name
then Result := 0
else Result := -1;
end;


// Подпрограмма для показа содержимого нашего списка
// --------------------------------------------------------------------------
procedure TForm1.ShowListContents;
var
i : Integer;
begin
// И повторный показ списка
for i := 0 to myList.Count-1 do
begin
ShowMessage(TCustomer(myList[i]).Name+' is customer number '+
IntToStr(TCustomer(myList[i]).Number));
end;
end;

// Конструктор формы
// --------------------------------------------------------------------------
procedure TForm1.FormCreate(Sender: TObject);
var
customer : TCustomer;

begin
// Создание объекта TList для хранения набора объектов клиент
myList := TList.Create;

// Создание нескольких объектов клиентов и добавление их в наш объект список
customer := TCustomer.Create('Neil Moffatt', 123);
myList.Add(customer);
customer := TCustomer.Create('Bill Gates', 64);
myList.Add(customer);

// Мы можем добавить объект, не присваивая в промежуточную переменную
myList.Add(TCustomer.Create('Henry Cooper', 999));
myList.Add(TCustomer.Create('Alan Sugar', 2));

// Теперь показываем список
ShowListContents;

// Теперь мы сортируем список в последовательность имён и повторяем показ
myList.Sort(compareByName);
ShowListContents;

// Теперь удаляем и вставляем некоторые объекты
// Обратите внимание, что индексы начинаются с 0
myList.Insert(2, TCustomer.Create('Added as item 3', 33));
myList.Delete(4);

// И повторно показываем список
ShowListContents;
end;

end.

Neil Moffatt является клиентом с номером 123
Bill Gates является клиентом с номером 64
Henry Cooper является клиентом с номером 999
Alan Sugar является клиентом с номером 2

Alan Sugar является клиентом с номером 2
Bill Gates является клиентом с номером 64
Henry Cooper является клиентом с номером 999
Neil Moffatt является клиентом с номером 123

Alan Sugar является клиентом с номером 2
Bill Gates является клиентом с номером 64
Added Добавленный как 3 элемент является клиентом с номером 33
Henry Cooper является клиентом с номером 999

Примечание

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

 

Авторизация



Счетчики