使用关联字符串(键/值)的最简单方法是什么?

时间:2008-10-29 18:35:36

标签: delphi

我有很多常量相关的常量,在某些时候我需要配对它们,如下所示:

const
  key1 = '1';
  key2 = '2';
  key3 = '3';

  value1 = 'a';
  value2 = 'b';
  value3 = 'c';

我想避免这样做:

if MyValue = key1 then Result := value1;

我知道如何使用以下字符串列表来完成:

MyStringList.Add(key1 + '=' + value1);
Result := MyStringList.Values[key1];

但是,有没有更简单的方法呢?

3 个答案:

答案 0 :(得分:9)

是的,可以通过这种方式完成分配,避免手动字符串连接:

MyStringList.Values[Key1] := Value1;

答案 1 :(得分:4)

围绕“价值”做一个包装

TMyValue = class
  value: String;
end;

然后使用:

myValue := TMyValue.Create;
myValue.Value = Value1;

MyStringList.AddObject(Key1, Value1);

然后,您可以对列表进行排序,执行IndexOf(Key1)并检索对象。

这样,您的列表就会排序,搜索速度非常快。

答案 2 :(得分:0)

您可以使用带有枚举的多维常量数组,其中至少有一个维度:

像这样定义:

type
  TKVEnum = (tKey, tValue); // You could give this a better name
const
  Count = 3;
  KeyValues: array [1..Count, TKVEnum] of string =
    // This is each of your name / value paris
    (('1', 'a'), ('2', 'b'), ('3', 'd'));  

然后你就这样使用它:

if MyValue = KeyValues[1, TKVEnum.tKey] then 
  Result := KeyValues[1, TKVEnum.tValue]

您也可以在其上使用 For 循环。这与将它们作为单独的常量字符串一样高效,但是为您提供了内在关联的额外优势。

不是用数字定义第一个维度,而是建议

type
  TConstPairs = (tcUsername, tcDatabase, tcEtcetera);

但我猜这完全取决于你的常数代表什么。