我有很多常量相关的常量,在某些时候我需要配对它们,如下所示:
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];
但是,有没有更简单的方法呢?
答案 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);
但我猜这完全取决于你的常数代表什么。