Delphi справочник - Форум программистов - Навигация  
 A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X  Y  Z      По первой букве  
System     SysUtils     StrUtils     DateUtils     FileCtrl     ConvUtils     StdConvs     Math     Classes     Dialogs     Types     Variants    ПО Unit   Compiler directives     Directives     Keywords     Types     Variables     Constants     Functions     Procedures    По категории  


Основы Delphi
TList
Тип
Универсальный контейнер списков объектов Classes unit
  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

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

Array  Тип данных содержащий индексируемую коллекцию данных

 
Пример кода : Создание, присвоение, сортировка, и переделывание списка
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
 



© Форум Delphi   |  Блог программистов   |  Создание и продвижение сайтов - "Веб сателлит"  |  Ссылки   |  Английская версия