Студопедия

КАТЕГОРИИ:

АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Класс TList. Свойства и методы. Тип pPointerList и pDouble. Пример.




Класс 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

 

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

Тип pPointerList определен следующим образом:

 

type

 

pPointerList = PPointerList;

 

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

 

Константа MaxListSize для Delphi 1 ограничена значением 16379 элементов. Для старших версий 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 : (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.

23. Классы TStringList и TStrings, основные свойства и методы. Пример.

TStringList - полезный тип класса. Он чрезвычайно полезен для многих видов обработок списков. Элементы в строковом списке могут быть вставлены, перемещены и отсортированы.

 

Список может быть сформирован строка за строкой, или загружен из большой строки разделенной запятой или даже из текстового файла. TStringList происходит от TStrings. Вы можете использовать и TStrings, но это не рекомендуется, так как он не полный - некоторые из его методов абстрактны. TStringList осуществляет эти абстрактные методы (Clear, Delete и Insert). Мы рассмотрим основные свойства и методы TStringList, включая полученные из TStrings.

 

Свойство Count

Возвращает число строк в списке.

 

Свойство Capacity

 

Устанавливает или получает текущую вместимость строкового списка. Вы можете управлять этой вместимостью по необходимости.

 

Свойство Strings

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

 

Обратите внимание, что свойство Strings является свойством, заданным по умолчанию. Это означает, что вы можете использовать его без его указания:

 

myName := names.Strings[4];

 

является эквивалентным:

 

myName := names[4];

 

Свойство Text

Устанавливает или получает список в виде большой строки. Эта строка будет содержать каждую строку закончивающуюся комбинацией символов перевода каретки и перевода строки (CRLF). Полезно для загрузки из визуального объекта, который может содержать многочисленные строки текста.

 

Свойство CommaText

Получает или устанавливает список в виде большой строки. Эта строка будет иметь список строк разделенных запятыми. Это полезно для загрузки из экспорта текстовой электронной таблицы. Если при получении строка содержит вложенные пространства, то она будет заключена в двойные кавычки.

 

Cвойство DelimitedText

Получает или устанавливает список через большую строку. Эта строка содержит список строк разделенных значением Delimiter (по умолчанию - запятая). Строки, содержащие вложенные пробелы должны быть заключены в QuoteChar (по умолчанию - ").

 

Свойство QuoteChar

Используется для замыкания строк, которые имеют вложенные пробелы при использовании DelimitedText.

 

Свойство Delimiter

Используется для разделения строк при использовании DelimitedText

. Свойство Names

Строки в строковом списке могут быть обработаны, как пары название/значение, как во втором примере кода. Каждая строка не должна иметь никаких внедренных пробелов, и содержать знак =. Это очень полезное понятие. См. свойства Value и ValueFromIndex, и метод IndexOfName.

 

Свойство Values

Возвращает значение для данного названия, когда используются строки пары название/значение (см. выше).

 

Свойство ValueFromIndex

Возвращает значение по индексу строки (начинается с 0), когда используются пары название/значение.

 

Свойство CaseSensitive

Когда true, Delphi обрабатывает строки чувствительно к регистру при выполнении некоторых операций, таких как Sort.

 

Свойство Duplicates

Это свойство может иметь одно из следующих перечислимых TDuplicates значений:

 

dupIgnore Игнорирует (отбрасывает) дубликаты

dupAccept Позволяют дубликаты

dupError Выбрасывает исключение, если имеются дубликаты

 

 

Свойство Sorted

Когда true, все строки будут добавляться в свою позицию отсортированной последовательности. Когда false, они будут добавляться в конец. См. также метод Sort.

 

Свойство Objects

Возвращает объект, связанный со строкой по данному индексу, если он существует.

 

Метод Add

Добавляет данную строку в список, возвращая ее позицию в списке (начинается с 0).

 

Метод Append

Так же как и Add, но без возвращения индексного значения.

 

Метод Insert

Вставляет строку в заданную индексом позицию. Позиция 0 вызовет вставку в начало.

 

Метод Delete

Удаляет строку по данному индексу.

 

Метод Clear

Удаляет все строки из списка.

 

Метод Move

Перемещает строку из одной позиции в другую, сдвигая другие строки соответственно.

 

Метод Exchange

Перестанавливает две строки в списке, идентифицированные по их индексным позициям.

 

Метод IndexOf

Получает индекс позиции строки в списке соответствующей данной строке. Если строка не найдена, то возвращается -1.

 

Метод IndexOfName

Получает индекс позиция первой пары название/значение строки, где название соответствует данной строке. Если не найдена - возвращается -1.

 

Метод Find

То же самое, что и IndexOf, но с использованием списков сортированных строк.

 

Метод Sort

Если Sorted является ложным, то это вызовет сортировку списка.

 

Метод AddStrings

Добавляет строки из другого списка.

 

Метод Assign

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

 

Метод LoadFromFile

Очень полезный метод, загружает строковый список из текстового файла. Каждая текстовая строка (законченая CRLF - см. DelimitedText) становится строкой списка.

 

Метод SaveToFile

Сохраняет строковый список в текстовый файл.

 

var
animals : TStringList; // Определение нашей переменной списка строк
i : Integer;
begin
// Определение объекта списка строк, и указание нашей переменной на него
animals := TStringList.Create;

// Теперь добавляем несколько названия в наш список
animals.Add('Cat');
animals.Add('Mouse');
animals.Add('Giraffe');

// Теперь показываем этих животных
for i := 0 to animals.Count-1 do
ShowMessage(animals[i]); // animals[i] эквивалентно animals.Strings[i]
end;










Последнее изменение этой страницы: 2018-04-12; просмотров: 279.

stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда...