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.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow