我正嘗試創建一個空映射,然後將其填充到for循環中。不確定如何在Rascal中繼續。出於測試目的,我想:使用Rascal MAP
rascal>map[int, list[int]] x;
ok
雖然,當我嘗試填充 「X」 使用:
rascal>x += (1, [1,2,3])
>>>>>>>;
>>>>>>>;
^Parse error here
我得到了一個語法錯誤。
我正嘗試創建一個空映射,然後將其填充到for循環中。不確定如何在Rascal中繼續。出於測試目的,我想:使用Rascal MAP
rascal>map[int, list[int]] x;
ok
雖然,當我嘗試填充 「X」 使用:
rascal>x += (1, [1,2,3])
>>>>>>>;
>>>>>>>;
^Parse error here
我得到了一個語法錯誤。
要開始,最好爲其分配一個初始值。您不必在控制檯上執行此操作,但如果在腳本中聲明變量,則這是必需的。另外,如果您打算使用+=
,則必須具有指定的值。
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]
。
地圖鍵值由以下分隔:如(1:2,2:3) – jurgenv