Delphi тип TList – універсальний контейнер списків об'єктів.
Classes unit
type TList;
Клас TList дуже корисний універсальний контейнер списків. Він відрізняється від масивів, у яких забезпечує більш багаті функціональні можливості.
Зокрема, об'єкти TList можуть бути відсортовані. Це сортування може бути за допомогою будь-яких обраних критеріїв. Наприклад, список може містити набір об'єктів, які мають рядок та чисельні поля. Ви можете відсортувати список за рядком, за кількістю, за обома, зі зростанням або зменшенням, як Ви бажаєте. І пересортувати пізніше за іншими критеріями.
Наведений приклад коду показує таке сортування.
Ключові властивості та методи згадані нижче.
Властивість Capacity
Використовується для встановлення розміру (кількість вказівників на об'єкти) списку. Попередньо встановивши розумне значення, можна уникнути множинних перерозподілів пам'яті.
Властивість Count
Число елементів (покажчиків) у списку. Може бути прочитаним або записаним. Якщо розмір зменшено в результаті зміни значення Count, то елементи видаляються в кінці списку.
Властивість Items
Дозволяє звертатися до елементів у списку. Наприклад, myList.Items[2]; повертає третій елемент у списку. Ця властивість, задана за замовчуванням, вищезгадане може бути спрощеним до myList[2];.
Властивість List
Повертає елементи в масиві.
Метод Add
Додає елемент до кінця списку.
Метод Assign
Замінює список змістом іншого списку.
Метод Clear
Видаляє всі елементи списку, встановлюючи Count в 0.
Метод Delete
Видаляє елемент зі списку за його позицією в списку.
Метод Remove
Видаляє елемент зі списку за його об'єктним покажчиком.
Метод Exchange
Змінює позиції двох елементів.
Метод Move
Переміщує елемент у нову позицію списку.
Метод Insert
Вставляє новий елемент у список в дану позицію.
Метод First
Отримує перший елемент в списку.
Метод Last
Отримує останній елемент в списку.
Метод Sort
Сортує список відповідно до ваших вказаних критеріїв. Сортування списку проводиться всередині TList, але кожна пара елемента порівнюється, викликаючи функцію, яку ви вказали для цього методу.
Метод IndexOf
Видає позицію вказаного об'єкта у списку.
Примітка.
Ви можете додати Nil покажчики до списку. Delphi додає Nil покажчики, коли Ви встановлюєте властивість Count вище ніж поточний номер елемента у списку.
Тип TList в Delphi: Створення, присвоєння, сортування та перероблення списку
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 : (негативне) більше ніж 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
Подібні функції, процедури та команди
TStringList — містить список змінної довжини, що складається з рядків.
Array — тип даних, що містить індексовану колекцію даних.
