1

Scala で整数から可変整数セットへの可変マップを構築しようとしています。

たとえば、フォーム 1 -> (2,3) のマッピングを作成し、キー値を使用して後で更新できるようにしたいと考えています。私が使用するコードは次のとおりです。

import scala.collection.mutable._

val map = Map[Int, Set[Int]]()
map: scala.collection.mutable.Map[Int,scala.collection.mutable.Set[Int]] = Map()

map += (1 -> Set(2,3))
res15: map.type = Map(1 -> Set(2, 3))

これまでのところ良いですが、次のようなことをしようとすると

map.get(1) += 4

val エラーへの割り当てが発生します。私が混乱しているのは、 map.get() が更新可能な scala.collection.mutable.Set 型の Set を返す必要があることです。誰かがここで何が起こっているのかを明らかにしてもらえますか?

4

2 に答える 2

3

この場合の問題は、「解凍」する必要がget()あるオプション()を返すことです。Option[scala.collection.mutable.Set[Int]]

map.get(1).get += 4

Mapのget()関数がオプションを返す理由は、特定のキーに値がない可能性があり、Scalaは対応するJavaAPIのように例外をスローすることを好まないためです。

apply()または、要求された値を直接返し、失敗した場合に例外をスローするメソッドを使用することもできます。

map(1) += 4

ただし、試したコードで「valへの再割り当て」エラーが発生する理由はよくわかりません。私の場合(Scala 2.10)、次のように表示されます。

<console>:12: error: value += is not a member of Option[scala.collection.mutable.Set[Int]]
          map.get(1) += 1

どのバージョンのScalaを使用していますか?

于 2013-01-20T21:17:55.030 に答える
0

よりエレガントな方法は

map.get(1).map(_ += 4).getOrElse{map += 1 -> Seq(4)}
于 2013-01-26T15:46:58.600 に答える