我想在Delphi中使用一个键来表示两个值,比如这个
TDictionary<tkey, tfirstvalue,tsecondvalue>;
答案 0 :(得分:2)
将您的值放入像记录一样的复合结构中。然后使用该记录类型作为字典值类型。
答案 1 :(得分:1)
Delphi没有Tuple类型。 我不知道你的目的,但可能是动态的记录类型帮助。
Type
Tdict_ = reocord
tkey:integer;
tfirstvalue,Tsecondvalue :string;
end;
var
Tdict:array of tdict_
...
procedure adddata(Tkey:integer;tfirstvalue:string;Tsecondvalue :string);
begin
setlength(tdict,length(tdict)+1);
tdict[length(tdict)-1].tkey:=tkey;
tdict[length(tdict)-1].tfirstvalue:=tfirstvalue;
tdict[length(tdict)-1].tsecondtvalue:=tsecondvalue;
end;
但你必须写自己的&#34;发现&#34;函数返回数组的索引。
例如
Function find(tkey:integer):integer;
var i:Integer;
begin
for i:=0 to length(Tdict)-1 do
if tdict[i].tkey=i then
begin
result:=i;
break;
end;
end;
Function deletecalue(tkey:integer):integer;
var i,j:Integer;
begin
i:=find(tkey)
for j:=i to length(Tdict)-2 do
tdict[j]:=tdict[j+1];
setlength(tdict,length(tdict)-1);
end;
如果键是字符串类型必须更改,但对于大日期来说它会很慢。
答案 2 :(得分:0)
TDictionary<TKey, TPair<TFirstValue, TSecondValue>>
是可行的。但是,TPair
(可在 System.Generics.Collections 中找到)并不意味着–两个值分别称为 Key 和 Value ,在这里没有意义。我们应该复制TPair
,可以将其命名为TTuple
。
然后您可以进行MyDictionary.Add('key', TTuple<string, string>.Create('firstvalue', 'secondvalue'));
由于它是作为record
(值类型)实现的,因此无需释放它。