Читайте также:
|
|
Список строк Delphi TStringList - это структура данных, напоминающая компонент ListBox, но не визуальная, а просто хранящая в памяти и имеющая свойства и методы для работы со строками типа TString.
Для работы со списком строк типа TStringList его сначала необходимо создать с помощью конструктора - Create:
var StrList: TStringList;
begin
StrList:=TStringList.Create;
Теперь нужно описать способ хранения строк в списке. Список строк типа TStringList может сортировать добавляемые строки или хранить без сортировки, а также может игнорировать попытки добавления новой строки при наличии уже сохранённого дубликата:
StrList.Sorted:=True; | //True - сортировать, False - не сортировать |
StrList.Duplicates:=dupIgnore; | //dupAccept - сохранять дубликаты (значение по умолчанию), dupIgnore - игнорировать, dupError - вызвать сообщение об ошибке |
Теперь можно добавить в список строки типа TString:
StrList.Add('Новая строка'); | //Добавление в конец списка (или в порядке сортировки). Возвращается индекс строки |
StrList.Insert(Index, 'Новая строка'); | //Строка добавляется на позицию с номером Index. Если список отсортирован, то возникает исключительная ситуация. |
Удалить строку:
StrList.Delete(Index); // Удаление строки с номером Index;
Количество строк в списке:
N:=StrList.Count;
Доступ к строке с номером Index:
Str:=StrList[Index];
Index отсчитывается от 0, поэтому номер последней строки:
Last:=StrList.Count-1;
Очищаем список строк:
StrList.Clear;
Если список отсортирован, есть метод для поиска:
StrList.Find(S, Index); | // В случае удачного поиска возвращает True, и индекс строки S в переменной Index |
Если список не отсортирован, то тоже есть функция поиска:
I:=StrList.IndexOf(Text); | // Возвращает индекс строки с заданным текстом Text, или -1, если поиск неудачен |
В конце работы со списком его необходимо удалить из памяти:
StrList.Free;
end;
Как видим, список типа TStringList обладает ценным свойством, которым вряд ли обладает какой-либо другой объект в Delphi, а именно возможностью обнаруживать дубликаты строк. Как узнать, что строка уже содержится в списке? Вот алгоритм:
Аналогичный, на мой взгляд даже более удобный, алгоритм реализации этой процедуры связан с использованием метода обработки исключений. Если вместо StrList.Duplicates:=dupIgnore для обработки дубликатов использовать значение dupError, это вызовет исключительную ситуацию при попытке добавить дубликат. Соответственно, при добавлении оригинальной строки программа идёт дальше, а при попытке добавления дубликата переходит к операторам секции except/end.
Эти методы работают в случае если список отсортирован. Однако есть задачи, где сортировка не нужна, а находить значение в списке всё равно необходимо. В этом случае нужно пользоваться функцией IndexOf.
Дата добавления: 2015-12-08; просмотров: 315 | Нарушение авторских прав