Dictionary 使用流氓地图

Dictionary 使用流氓地图,dictionary,rascal,Dictionary,Rascal,我试图创建一个空映射,然后在for循环中填充它。不知道如何在流氓继续。出于测试目的,我尝试: rascal>map[int, list[int]] x; ok 但是,当我尝试使用以下方法填充“x”时: 我有一个解析错误 首先,最好为其指定一个初始值。您不必在控制台上执行此操作,但如果在脚本中声明变量,则需要执行此操作。此外,如果要使用+=,则必须已经为其指定了一个值 rascal>map[int,list[int]] x = ( ); map[int, list[int]]: ()

我试图创建一个空映射,然后在for循环中填充它。不知道如何在流氓继续。出于测试目的,我尝试:

rascal>map[int, list[int]] x;
ok
但是,当我尝试使用以下方法填充“x”时:


我有一个解析错误

首先,最好为其指定一个初始值。您不必在控制台上执行此操作,但如果在脚本中声明变量,则需要执行此操作。此外,如果要使用
+=
,则必须已经为其指定了一个值

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
更好,
+=
如果您将两个现有贴图添加在一起并将结果保存到其中一个贴图中更好。

首先,最好为其分配一个初始值。您不必在控制台上执行此操作,但如果在脚本中声明变量,则需要执行此操作。此外,如果要使用
+=
,则必须已经为其指定了一个值

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
更好,
+=
如果您将两个现有映射添加在一起并将结果保存到其中一个中更好。

我有时也喜欢这种解决方案,如果不加入贴图,只需更新某个键的值:

m = ();
for (...whatever...) {
   m[key]?[] += [1,2,3];
}

在这段代码中,当键尚未出现在映射中时,它将以
[]
空列表开始,然后将
[1,2,3]
连接到它,或者如果键已经出现,比如说它已经在[1,2,3],那么这将创建
[1,2,3,1,2,3]
在地图中的特定键处。

我有时也喜欢这种解决方案,您不加入地图,只需更新某个键的值:

m = ();
for (...whatever...) {
   m[key]?[] += [1,2,3];
}

在这段代码中,当键尚未出现在映射中时,它将以
[]
空列表开始,然后将
[1,2,3]
连接到它,或者如果键已经出现,比如说它已经在[1,2,3],那么这将创建
[1,2,3,1,2,3]
在映射中的特定键处。

映射键值用:分隔,如在(1:2,2:3)中,映射键值用:分隔,如在(1:2,2:3)中,这是必须在Racal中多次执行的操作的干净表示法。干得好!我们感谢你的赞美。对于必须在Racal中多次执行的操作,这是一个干净的表示法。干得好!我们感谢你的赞美。