Работа со списками в делфи - Списки

Класс TStringList обеспечивает реальное использование списков строк в приложении. По существу, класс представляет собой оболочку вокруг динамического массива значений списка, представленного свойством strings. Объявление свойства унаследованное от TStrings выглядит так: Для работы со свойством используются внутренние методы Get и Put , в которых применяется внутренняя переменная FList: Из ее объявления видно, что список строк представляет собой динамический массив записей TStringItem.

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

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

Для добавления нового элемента используются методы Add И AddStrings. Единственное отличие заключается в том, что метод не возвращает индекс нового элемента.

Списки

При необходимости можно добавить новый элемент в произвольное место списка. Для этого применяется метод. При этом все указанные элементы смещаются на одну позицию вниз. В качестве примера можно привести строки из файлов INI или системного реестра. Специально для таких случаев в списке предусмотрено представление строк в двух свойствах.

В свойстве Names содержится текст до знака равенства. В свойстве values содержится текст после знака равенства по умолчанию. Однако символ-разделитель можно заменить на любой другой, использовав свойство. Доступ к значениям свойства values осуществляется по значению. Например, если в списке есть строка. Кроме этого, значение свойства value можно получить, если известен его индекс: Как видно из объявления внутреннего списка FList см.

Для этого используется свойство. Свойство strings элемента и свойство objects связанного с ним объекта имеют одинаковые индексы. Если строка не имеет связанного объекта, то свойство objects равно Nil. Один объект может быть связан с несколькими строками списка одновременно. Чаще всего объекты нужны для того, чтобы хранить для каждого элемента дополнительную информацию. Например, в списке городов для каждого элемента можно дополнительно хранить население, площадь, административный статус и т.

Для этого можно создать примерно такой класс: Для того чтобы добавить к строке из списка объект, используется метод AddObject: Обратите внимание, что в параметре AObject необходимо передавать указатель на объект. Проще всего это сделать таким образом: Аналогично методу insert , элемент и связанный с ним объект можно вставить в произвольное место списка методом.

При перемещении методом Move вместе с элементом переносится и указатель на связанный объект. Обратите внимание на две особенности, связанные с удалением указателей на объекты и самих связанных объектов. При удалении элемента списка удаляется только указатель на объект, а сам объект остается в памяти. Для его уничтожения следует предпринять дополнительные усилия: Если при удалении связанного объекта необходимо выполнить некоторые действия, предусмотренные в деструкторе, приведение типов.

Помимо перечисленных, класс TStringList обладает рядом дополнительных свойств и методов. Вспомогательные свойства класса обеспечивают разработчика информацией о состоянии списка. Дополнительные методы осуществляют поиск в списке и взаимодействие с файлами и потоками.

Так как основу списка составляет динамический массив, то для него в процессе работы должна выделяться память. При добавлении в список новой строки память для нее выделяется автоматически. Вы можете самостоятельно управлять этим параметром, помня при этом, что значение Capacity всегда должно быть больше или равно значению Count. Класс TStringList немыслимо представить себе без возможностей сортировки. Если вас удовлетворит обычная сортировка, то для этого можно использовать свойство sorted сортировка выполняется при значении True или метод Sort.

Под "обычной" имеется в виду сортировка по тексту строк с использованием функции Ansicomparestr т. Если вы хотите отсортировать список по другому критерию, к вашим услугам метод: Чтобы отсортировать список, вы должны описать функцию сравнения двух элементов с индексами indexl и index2 , которая должна возвращать следующие результаты: В параметре s передается значение для поиска. В случае успеха функция возвращает значение True , а в параметре index содержится индекс найденного элемента.

Простой и комбинированный списки

В качестве параметра AObject должна передаваться ссылка на искомый объект. Они представляют все строки списка в виде одной строки. При этом в первом свойстве элементы списка разделены символами возврата каретки и переноса строки. Во втором свойстве строки заключены в двойные кавычки и разделены запятыми или пробелами.

Так, для списка городов Москва, Петербург, Одесса свойство Text будет равно. Важно иметь в виду, что эти свойства доступны не только по чтению, но и по записи. Так что заполнить список вы сможете не только циклически, вызывая и используя методы Add или insert , но и одним-единственным присвоением значения свойствам Text или CommaText. Список может взаимодействовать с другими экземплярами класса TstringList.

На дискете, прилагаемой к этой книге, вы можете ознакомиться с примером использования списков строк DemoStrings. Знаете ли Вы, что инкапсуляция, Encapsulation - От лат. Другим объектам доступен только интерфейс объекта, через который осуществляется все взаимодействие с ним.

НОВОСТИ ФОРУМА Рыцари теории эфира.