Embarcadero Delphi
Klasa TStringList
Szukaj…
Wprowadzenie
TStringList jest potomkiem klasy TStrings VCL. TStringList może być używany do przechowywania i manipulowania listą ciągów. Choć pierwotnie przeznaczony dla ciągów, za pomocą tej klasy można również manipulować dowolnym typem obiektów.
TStringList jest szeroko stosowany w VCL, gdy celem jest utrzymanie listy ciągów. TStringList obsługuje bogaty zestaw metod, które oferują wysoki poziom dostosowania i łatwość manipulacji.
Poniższy przykład demonstruje tworzenie, dodawanie łańcuchów, sortowanie, pobieranie i zwalnianie obiektu 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 ma różne przypadki użytkowników, w tym manipulację ciągami, sortowanie, indeksowanie, parowanie klucz-wartość i separator separatorów.
Parowanie klucz-wartość
Za pomocą TStringList można przechowywać pary klucz-wartość. Może to być przydatne na przykład do przechowywania ustawień. Ustawienia składają się z klucza (identyfikator ustawienia) i wartości. Każda para klucz-wartość jest przechowywana w jednym wierszu StringList w formacie klucz = wartość.
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;
W tym przykładzie lista ciągów ma następującą zawartość przed zniszczeniem:
1stName=John
LastName=Doe
City=New York
Uwaga na temat wydajności
Pod maską TStringList
wykonuje wyszukiwanie klucza poprzez proste zapętlanie wszystkich elementów, wyszukiwanie separatora wewnątrz każdego elementu i porównywanie części nazwy z danym kluczem. Nie trzeba mówić, że ma ogromny wpływ na wydajność, dlatego ten mechanizm powinien być stosowany tylko w niekrytycznych, rzadko powtarzanych miejscach. W przypadkach, w których TDictionary<TKey,TValue>
wydajność, należy użyć TDictionary<TKey,TValue>
z System.Generics.Collections
który implementuje wyszukiwanie tabeli skrótów lub przechowywać klucze w posortowanej TStringList
z wartościami przechowywanymi jako Object
-s, wykorzystując w ten sposób algorytm wyszukiwania binarnego.