Embarcadero Delphi
TStringList-klasse
Zoeken…
Invoering
TStringList is een afstammeling van de TStrings-klasse van de VCL. TStringList kan worden gebruikt voor het opslaan en manipuleren van een lijst met strings. Hoewel oorspronkelijk bedoeld voor tekenreeksen, kan elk type objecten ook met deze klasse worden gemanipuleerd.
TStringList wordt veel gebruikt in VCL wanneer het doel is om een lijst met strings bij te houden. TStringList ondersteunt een uitgebreide reeks methoden die een hoge mate van maatwerk en gemakkelijke manipulatie bieden.
In het volgende voorbeeld wordt het maken, toevoegen van tekenreeksen, sorteren, ophalen en vrijgeven van een TStringList-object gedemonstreerd.
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 heeft verschillende gebruikersgevallen, waaronder stringmanipulatie, sorteren, indexeren, sleutel / waarde-paren en scheidingstekens.
Sleutel / waarde-koppeling
U kunt een TStringList gebruiken om sleutel / waarde-paren op te slaan. Dit kan handig zijn als u bijvoorbeeld instellingen wilt opslaan. Een instelling bestaat uit een sleutel (de identificatie van de instelling) en de waarde. Elk Key-Value-paar wordt opgeslagen op één regel van de StringList in Key = Value-indeling.
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;
In dit voorbeeld heeft de Stringlist de volgende inhoud voordat deze wordt vernietigd:
1stName=John
LastName=Doe
City=New York
Opmerking over de prestaties
Onder de motorkap voert TStringList
een sleutelzoekactie uit door alle items recht te doorlopen, in elk item naar een scheidingsteken te zoeken en het TStringList
vergelijken met de gegeven sleutel. Het is niet nodig om te zeggen dat het een enorme impact heeft op de prestaties, dus dit mechanisme mag alleen worden gebruikt op niet-kritieke, zelden herhaalde plaatsen. In gevallen waar prestaties ertoe doen, moet men TDictionary<TKey,TValue>
van System.Generics.Collections
die hashtabelzoekopdrachten implementeert of om sleutels in gesorteerde TStringList
met waarden die zijn opgeslagen als Object
-s en dus gebruik maken van het binaire zoekalgoritme.