Embarcadero Delphi
Classe TStringList
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.