2015-10-16 25 views
1

我正嘗試創建一個空映射,然後將其填充到for循環中。不確定如何在Rascal中繼續。出於測試目的,我想:使用Rascal MAP

rascal>map[int, list[int]] x; 
ok 

雖然,當我嘗試填充 「X」 使用:

rascal>x += (1, [1,2,3]) 
>>>>>>>; 
>>>>>>>; 
     ^Parse error here 

我得到了一個語法錯誤。

+0

地圖鍵值由以下分隔:如(1:2,2:3) – jurgenv

回答

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

我也很喜歡這個解決方案有時,你不是加盟的地圖只需要更新某個特定鍵的值:

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

在這段代碼,當關鍵是在地圖目前不存在,那麼它以[]空列表開始,然後連接[1,2,3]到它,或者如果已經存在,假設它已經在[1,2,3],那麼這將在地圖中的特定鍵上創建[1,2,3,1,2,3]