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.



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow