Ricerca…


introduzione

TStringList è un discendente della classe TStrings del VCL. TStringList può essere utilizzato per archiviare e manipolare l'elenco di stringhe. Sebbene originariamente previsto per le stringhe, qualsiasi tipo di oggetto può anche essere manipolato utilizzando questa classe.

TStringList è ampiamente utilizzato in VCL quando lo scopo è lì per mantenere un elenco di stringhe. TStringList supporta un ricco insieme di metodi che offrono un alto livello di personalizzazione e facilità di manipolazione.

L'esempio seguente dimostra la creazione, l'aggiunta di stringhe, l'ordinamento, il recupero e la liberazione di un oggetto 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 ha una varietà di casi utente tra cui la manipolazione delle stringhe, l'ordinamento, l'indicizzazione, l'accoppiamento dei valori-chiave e la separazione del delimitatore tra di essi.

Accoppiamento valore-chiave

È possibile utilizzare una TStringList per memorizzare coppie chiave-valore. Questo può essere utile se si desidera memorizzare le impostazioni, ad esempio. Una configurazione è composta da una chiave (l'identificatore dell'impostazione) e il valore. Ogni coppia chiave-valore è memorizzata in una riga di StringList in Key = Value format.

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 questo esempio, la lista di stringhe ha il seguente contenuto prima che venga distrutta:

1stName=John
LastName=Doe
City=New York

Nota sulle prestazioni

Sotto il cofano TStringList esegue la ricerca delle chiavi TStringList un ciclo TStringList tutti gli elementi, cercando il separatore all'interno di ogni elemento e confrontando la parte del nome con quella specificata. Non c'è bisogno di dire che ha un impatto enorme sulle prestazioni, quindi questo meccanismo dovrebbe essere usato solo in luoghi non critici, raramente ripetuti. Nei casi in cui le prestazioni sono importanti, si dovrebbe usare TDictionary<TKey,TValue> da System.Generics.Collections che implementa la ricerca nella tabella hash o per mantenere le chiavi in TStringList ordinata con i valori memorizzati come Object -s, quindi utilizzando l'algoritmo di ricerca binaria.



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow