Поиск…


Вступление

TStringList является потомком класса TStrings для VCL. TStringList может использоваться для хранения и управления списком строк. Хотя первоначально предназначенный для строк, любой тип объектов можно также манипулировать с помощью этого класса.

TStringList широко используется в VCL, когда целью является поддержание списка строк. TStringList поддерживает богатый набор методов, которые обеспечивают высокий уровень настройки и простоту манипулирования.

Следующий пример демонстрирует создание, добавление строк, сортировку, извлечение и освобождение объекта 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 имеет множество пользовательских случаев, включая обработку строк, сортировку, индексацию, спаривание значений ключа и разделение разделителей между ними.

Сопоставление ключевых значений

Вы можете использовать TStringList для хранения пар ключ-значение. Это может быть полезно, если вы хотите сохранить настройки, например. Настройки состоят из клавиши (Идентификатор настройки) и значения. Каждая пара Key-Value хранится в одной строке StringList в формате Key = Value.

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;

В этом примере список Stringlist имеет следующее содержимое до его уничтожения:

1stName=John
LastName=Doe
City=New York

Примечание по эффективности

Под капотом TStringList выполняет поиск по ключевым TStringList путем прямого цикла всех элементов, поиска разделителя внутри каждого элемента и сравнения части имени с данным ключом. Не нужно говорить, что это оказывает огромное влияние на производительность, поэтому этот механизм следует использовать только в некритических, редко повторяющихся местах. В тех случаях, когда важна производительность, следует использовать TDictionary<TKey,TValue> из System.Generics.Collections который реализует поиск хеш-таблицы или сохраняет ключи в отсортированном TStringList со значениями, хранящимися как Object s, с использованием алгоритма поиска двоичных файлов.



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow