2016-12-14 11 views

答えて

0

値をいくつか戻すことができます。参考のために、次のマップがあるとします。

rascal>map[str words, int counts] m = ("word1" : 3, "word2" : 10, "word3" : 4, "word4" : 10); 
map[str words, int counts]: ("word1":3,"word2":10,"word3":4,"word4":10) 

これは、文書内に表示される単語と頻度として見ることができます。値を取得する方法はいくつかあります。 m(それぞれwordscounts)という型を宣言したときに、ドメイン名と範囲名を指定したので、これらの名前を使用して値を取得できます。

rascal>m.counts; 
set[int]: {10,3,4} 

が値を取り戻す:例えば:ながら

rascal>m.words; 
set[str]: {"word1","word2","word3","word4"} 

は、キーを取り戻します。またそうのように、キーまたは値を突出、「投影」の表記を使用することができます。

rascal>m<0>; 
set[str]: {"word1","word2","word3","word4"} 
rascal>m<1>; 
set[int]: {10,3,4} 

我々は型では、ドメインと範囲に名前を追加しなかった場合でも、これは動作します。私たちが名を追加していないときにもにも作品第三の選択肢は、あなたがMapライブラリからのライブラリ関数を使用することができます:今、私たちは値のセットを持っていることを

rascal>import Map; 
ok 
rascal>domain(m); 
set[str]: {"word1","word2","word3","word4"} 
rascal>range(m); 
set[int]: {10,3,4} 

、あなたはmax機能を使用することができますSetライブラリ内の最大数を見つけること:何あなたが本当にしたいことは、この値を持つキーまたはキーであれば

rascal>import Set; 
ok 
rascal>max(m.counts); 
int: 10 

あなたは今、さまざまなオプションを持っています。 Mapライブラリには、invertという関数が含まれています。この関数は、キーと値を「反転」します。同じ値を持つ複数のキーを持つことができるので、実際には値からこの値を持つすべてのキーまでのマップが得られます。だから、

rascal>invert(m); 
map[int, set[str]]: (
    10:{"word2","word4"}, 
    3:{"word1"}, 
    4:{"word3"} 
) 

我々は最大の数値を持つ単語を取り戻すしたい場合は、私たちは次のことを行うことができます:私たちのケースでは、これは次のようになります

rascal>invert(m)[max(m.counts)]; 
set[str]: {"word2","word4"} 
関連する問題