鍵值配對

你可以使用 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,從而利用二進位制查詢演算法。