我正在尝试创建一个空映射,然后将在for循环中填充。不确定如何在Rascal进行。出于测试目的,我尝试了:
rascal>map[int, list[int]] x;
ok
但是,当我尝试使用:
填充“x”时rascal>x += (1, [1,2,3])
>>>>>>>;
>>>>>>>;
^ Parse error here
我有一个解析错误。
答案 0 :(得分:3)
首先,最好为其分配一个初始值。您不必在控制台上执行此操作,但如果您在脚本中声明变量,则必须执行此操作。此外,如果您要使用+=
,则必须已经指定了值。
rascal>map[int,list[int]] x = ( );
map[int, list[int]]: ()
然后,当您将项目添加到地图中时,键和值之间用:
分隔,而不是,
,因此您需要这样的内容:
rascal>x += ( 1 : [1,2,3]);
map[int, list[int]]: (1:[1,2,3])
rascal>x[1];
list[int]: [1,2,3]
更简单的方法是使用与上面显示的查找类似的表示法:
rascal>x[1] = [1,2,3];
map[int, list[int]]: (1:[1,2,3])
通常,如果您只是设置一个键的值,或者在循环内分配键,x[key] = value
更好,+=
如果您将两个现有地图一起添加并保存导致其中一个。
答案 1 :(得分:2)
我有时也喜欢这个解决方案,你不是加入地图而只是更新某个键的值:
m = ();
for (...whatever...) {
m[key]?[] += [1,2,3];
}
在此代码中,当密钥不但仍存在于地图中时,它会以[]
空列表开头,然后将[1,2,3]
连接到它,或者如果键已经已经存在,假设它已经在[1,2,3],那么这将在地图中的特定键处创建[1,2,3,1,2,3]
。