键值配对

你可以使用 TStringList 存储键值对。例如,如果要存储设置,这可能很有用。设置由键(设置的标识符)和值组成。每个键值对以 Key = Value 格式存储在 StringList 的一行中。

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 通过直接循环遍历所有项目来执行密钥搜索,在每个项目中搜索分隔符并将名称部分与给定密钥进行比较。无需说它对性能产生巨大影响,因此这种机制只应用于非关键的,很少重复的地方。在性能很重要的情况下,应该使用来自 System.Generics.CollectionsTDictionary<TKey,TValue> 来实现哈希表搜索,或者将密钥保存在已分类的 TStringList 中,其值存储为 Object-s,从而利用二进制查找算法。