2017-05-04 12 views
2

地図の中にキーが存在するかどうか確認したいと思いますが、存在する場合は値を1増やしたいと思います。存在しない場合は、マップ上に値1の新しいアイテムを追加したいと考えています。地図を更新するための機能的方法

「機能的な方法」とは何ですか?私はfindとfoldを使って書きましたが、ちょっと変わったようです。

val updatedScore = currentScores 
    .find(s => s._1.equals(score)) 
    .fold(score -> 1)(s => s._1 -> (s._2 + 1)) 

val newScores = currentScores + updatedScore 

誰かが同じことをするより良い解決策を持っていますか?

答えて

0
val updatedScore = score -> (currentScores(score)+ 1) 
val newScores= currentScores - score + newScore 
1
val ret: mutable.Map[Int, Int] = mutable.Map[Int, Int]().withDefaultValue(1) 
val arg = 5 
ret.update(arg, ret(5)+1) 
+1

「機能的」は、通常、「副作用を避ける」ことを意味します。 'update'は副作用です。 –

+1

私はこれを知りません:なぜこれは副作用ですか?つまり、この全体的な質問は、変更可能な地図を更新することなのですか? – user7938511

+0

これは有効な回答です。受け入れられた答えは、OPが望んだものです。しかし、マップ全体が新しいマップにコピーされなければならないので、非常に非効率的です。変更可能なデータ構造は理由のためにスカラーになっていますが、これは良いユースケースになるかもしれません。 – Akavall

0

。あなたが数を累積しているので、副作用を避ける良い理由はないようです。

関連する問題