いくつかの奇妙な理由で、scala.collection.immutable.HashMap
で宣言されているが、汎用のMap
特性では宣言されていないこの1つのメソッドmerged
があります(実装によって、他のMap
の実装には非常に不便です)。どのようにscalaをMapaから変換するのですか?scala.collection.immutable.HashMap?
私はMap[A, B]
をHashMap[A, B]
に変換する必要があります。これまで簡単な方法を見つけることができません。これは私の現在の実装ですハックdef to[Col[_]]
の周りにバイナリ高級の代わりに単なる高級を期待しています。
val m1 = Map("foo" -> 1)
val m2 = Map("foo" -> 2, "bar" -> 2)
type HM[_] = HashMap[String, Int]
(m1.to[HM] merged m2.to[HM]) { case ((k1, v1), (k2, v2)) => (k1, v1 + v2) } // Map("foo" -> 3, "bar" -> 2)
期待通りに動作しますが、私は(それがデフォルトの実装です与えられた)Map
からHashMap
に変換するためのより良い方法がなければならないと思うするのではなく、助けることはできません。
おそらくより一般的には、スカラコレクションの一般的な特性のデフォルト実装にアクセスするにはどうすればよいでしょうか?
おそらく 'HashMap(m1.toSeq:_ *)'ですか?マップをマージするその他のオプションについては、http://stackoverflow.com/questions/7076128/best-way-to-merge-two-maps-and-sum-the-values-of-same-keyを参照してください。 –
'HashMap'でのみ利用可能な操作を使用する場合、最初にあなたのマップを' HashMap'として宣言してみませんか? –
@Łukaszええ私はその質問を見たことがありますが、私のコードのこの部分はパフォーマンスに非常に敏感で、 'toSeq'を使うには2回の反復が必要です。同じノートでは、 'merged 'はおそらく非常に効率的ですので、それを使うのがいいでしょう。 –