Dictionary 为什么我不能在这里创建一个简单的字典
我正在尝试使用TFPGmap创建和使用一个简单的字典:Dictionary 为什么我不能在这里创建一个简单的字典,dictionary,hashmap,freepascal,Dictionary,Hashmap,Freepascal,我正在尝试使用TFPGmap创建和使用一个简单的字典: program rnTFPGmap; {$mode objfpc} uses fgl; var mydict: specialize TFPGmap<string, string>; key: string; i: longint; begin mydict.create; mydict.add('k1','v1'); mydict.add('k2','v2')
program rnTFPGmap;
{$mode objfpc}
uses fgl;
var
mydict: specialize TFPGmap<string, string>;
key: string;
i: longint;
begin
mydict.create;
mydict.add('k1','v1');
mydict.add('k2','v2');
mydict.add('k3','v3');
//for key in mydict.keys do {does not work either;}
for i := 1 to length(mydict) do {line 17: first error from here. }
writeln(mydict[i]);
end.
编辑:我试图根据文档修改代码,并得出以下版本:
program rnTFPGmap;
{$mode objfpc}
uses fgl;
type
tuple = specialize TFPGmap<string, string>;
mydict = Array of tuple;
var
dict: mydict;
i: tuple;
item: string;
begin
setlength(dict, length(dict)+3);
dict.add('k1','v1'); {error on this line: "CREATE" expected but "ADD" found}
dict.add('k2','v2');
dict.add('k3','v3');
writeln('dict.count: ', dict.count);
for i in dict do
writeln(i);
end.
无法解决此问题。以下代码有效。有关一些解释,请参见注释:
program rnTFPGmap;
{$mode objfpc}
uses fgl;
type
Rndict = specialize TFPGmap<string, string>;{define type under type}
var
dict: Rndict; {define object under var}
i: integer;
{main: }
begin
dict := Rndict.Create; {create object in main}
dict.add('k1','v1');
dict.add('k2','v2');
dict.add('k3','v3');
for i := 0 to (dict.count-1) do begin
writeln('i: ',i, '; key: ', dict.getkey(i), '; value: ', dict.getdata(i));
end;
end.
我感谢@DavidHeffernan的指导。以下代码有效。有关一些解释,请参见注释:
program rnTFPGmap;
{$mode objfpc}
uses fgl;
type
Rndict = specialize TFPGmap<string, string>;{define type under type}
var
dict: Rndict; {define object under var}
i: integer;
{main: }
begin
dict := Rndict.Create; {create object in main}
dict.add('k1','v1');
dict.add('k2','v2');
dict.add('k3','v3');
for i := 0 to (dict.count-1) do begin
writeln('i: ',i, '; key: ', dict.getkey(i), '; value: ', dict.getdata(i));
end;
end.
我感谢@DavidHeffernan的指导。你认为这里为什么可以使用长度?你用什么作为参考?看起来你在猜。我可以告诉你答案,但问题会一直出现,直到你开始使用一个适当的参考。而且,这不是实例化对象的方式。另请参见,在这种语言中,我们基于零计数。我尝试了:
for I:=0 to mydict.count do writeln(mydict[I])代码>但得到错误:错误:参数1的不兼容类型:得到“LongInt”,预期为“ShortString”
我正在使用的一些文档:,,您缺少的关键文档是您正在使用的类的文档。我可以给你这个链接,但是如果你能自己用websearch找到它,那就太好了。它有所有的答案。这不是一个德尔菲问题。你为什么认为这里可以使用长度?你用什么作为参考?看起来你在猜。我可以告诉你答案,但问题会一直出现,直到你开始使用一个适当的参考。而且,这不是实例化对象的方式。另请参见,在这种语言中,我们基于零计数。我尝试了:for I:=0 to mydict.count do writeln(mydict[I])代码>但得到错误:错误:参数1的不兼容类型:得到“LongInt”,预期为“ShortString”
我正在使用的一些文档:,,您缺少的关键文档是您正在使用的类的文档。我可以给你这个链接,但是如果你能自己用websearch找到它,那就太好了。它有所有的答案。这不是德尔菲问题。
program rnTFPGmap;
{$mode objfpc}
uses fgl;
type
Rndict = specialize TFPGmap<string, string>;{define type under type}
var
dict: Rndict; {define object under var}
i: integer;
{main: }
begin
dict := Rndict.Create; {create object in main}
dict.add('k1','v1');
dict.add('k2','v2');
dict.add('k3','v3');
for i := 0 to (dict.count-1) do begin
writeln('i: ',i, '; key: ', dict.getkey(i), '; value: ', dict.getdata(i));
end;
end.
i: 0; key: k1; value: v1
i: 1; key: k2; value: v2
i: 2; key: k3; value: v3