Embarcadero Delphi
Класс TStringList
Поиск…
Вступление
TStringList является потомком класса TStrings для VCL. TStringList может использоваться для хранения и управления списком строк. Хотя первоначально предназначенный для строк, любой тип объектов можно также манипулировать с помощью этого класса.
TStringList широко используется в VCL, когда целью является поддержание списка строк. TStringList поддерживает богатый набор методов, которые обеспечивают высокий уровень настройки и простоту манипулирования.
Следующий пример демонстрирует создание, добавление строк, сортировку, извлечение и освобождение объекта TStringList.
procedure StringListDemo;
var
MyStringList: TStringList;
i: Integer;
Begin
//Create the object
MyStringList := TStringList.Create();
try
//Add items
MyStringList.Add('Zebra');
MyStringList.Add('Elephant');
MyStringList.Add('Tiger');
//Sort in the ascending order
MyStringList.Sort;
//Output
for i:=0 to MyStringList.Count - 1 do
WriteLn(MyStringList[i]);
finally
//Destroy the object
MyStringList.Free;
end;
end;
TStringList имеет множество пользовательских случаев, включая обработку строк, сортировку, индексацию, спаривание значений ключа и разделение разделителей между ними.
Сопоставление ключевых значений
Вы можете использовать TStringList для хранения пар ключ-значение. Это может быть полезно, если вы хотите сохранить настройки, например. Настройки состоят из клавиши (Идентификатор настройки) и значения. Каждая пара Key-Value хранится в одной строке StringList в формате Key = Value.
procedure Demo(const FileName: string = '');
var
SL: TStringList;
i: Integer;
begin
SL:= TStringList.Create;
try
//Adding a Key-Value pair can be done this way
SL.Values['FirstName']:= 'John'; //Key is 'FirstName', Value is 'John'
SL.Values['LastName']:= 'Doe'; //Key is 'LastName', Value is 'Doe'
//or this way
SL.Add('City=Berlin'); //Key ist 'City', Value is 'Berlin'
//you can get the key of a given Index
IF SL.Names[0] = 'FirstName' THEN
begin
//and change the key at an index
SL.Names[0]:= '1stName'; //Key is now "1stName", Value remains "John"
end;
//you can get the value of a key
s:= SL.Values['City']; //s now is set to 'Berlin'
//and overwrite a value
SL.Values['City']:= 'New York';
//if desired, it can be saved to an file
IF (FileName <> '') THEN
begin
SL.SaveToFile(FileName);
end;
finally
SL.Free;
end;
end;
В этом примере список Stringlist имеет следующее содержимое до его уничтожения:
1stName=John
LastName=Doe
City=New York
Примечание по эффективности
Под капотом TStringList
выполняет поиск по ключевым TStringList
путем прямого цикла всех элементов, поиска разделителя внутри каждого элемента и сравнения части имени с данным ключом. Не нужно говорить, что это оказывает огромное влияние на производительность, поэтому этот механизм следует использовать только в некритических, редко повторяющихся местах. В тех случаях, когда важна производительность, следует использовать TDictionary<TKey,TValue>
из System.Generics.Collections
который реализует поиск хеш-таблицы или сохраняет ключи в отсортированном TStringList
со значениями, хранящимися как Object
s, с использованием алгоритма поиска двоичных файлов.