スカラでは、コレクションのgroupBy()
を呼び出すとMap
が返されます。値はコレクションですが、MultiMap
が必要です。変換を行う最も簡単な方法は何ですか?新しいMultiMap
を作成せずにすべてをコピーすることはできますか?Scalaの特性に混在させる新しいオブジェクトを作成する必要がありますか?
6
A
答えて
5
"私はScalaの特性に混在する新しいオブジェクトを作成する必要がありますか?"はいです。ラッピングオブジェクトと暗黙的な変換によって、痛みを最小限に抑えることができます。あなたの特定の問題については
、私はあなたが「マルチマップとMapProxy」でそれをラップする必要があります可変セットに変更可能なマップを返すようにGROUPBY(...)を強制することができませんでした。しかし、「GROUPBY」の独自のバージョンを実装するためのコードがあまりにも多くの行ではありません。ここで
package blevins.example
object App extends Application {
implicit def multiMapable[B](c: Iterable[B]) = new {
def groupByMM[A](f: B => A) = {
import scala.collection.mutable._
val ret = new HashMap[A,Set[B]] with MultiMap[A,B]
for (e <- c) { ret.addBinding(f(e), e) }
ret
}
}
val c = List(1,2,3,4,5,6,7,8,9)
val mm = c.groupByMM { i => if (i < 5) "alpha" else "beta" }
mm.addBinding("alpha",12)
println(mm) // Map(beta -> Set(5, 7, 6, 9, 8), alpha -> Set(3, 1, 4, 2, 12))
}
補遺
は、既存の地図をラッピングの一例である[文字列、設定[INT]]マルチマップへ値をコピーせず:シードマップはbに必要とされるので、これはGROUPBY(...)の結果で行うことができないこと
object App extends Application {
import scala.collection.mutable._
val seed: Map[String,Set[Int]] = Map("even" -> Set(2,4,6), "odd" -> Set(1,3,5))
val multiMap = new MapProxy[String,Set[Int]] with MultiMap[String,Int] {
val self = seed
}
multiMap.addBinding("even", 8)
println(multiMap) // Map(odd -> Set(5, 3, 1), even -> Set(6, 8, 4, 2))
}
注e mutableおよびgroupBy(...)は不変のマップを返します。
関連する問題
- 1. DateRangeオブジェクトを作成する必要がありますか?
- 2. いつ新しいブランチを作成する必要がありますか?
- 3. AsyncCallbackを新しいオブジェクトとして作成し、EndInvokeをオプションにする必要がありますか?
- 4. いつwit.aiに新しいインテントを作成する必要があります
- 5. 新しいテーブルを作成する必要がありますか?
- 6. 新しいCancellationTokenSource()を作成する必要がありますか。タスクキャンセル後?
- 7. 新しいDB列を作成する必要がありますか?
- 8. EmptyStacksの新しいRunTimeExceptionを作成する必要があります
- 9. いつ新しいオブジェクトをJavascriptで作成する必要がありますか?
- 10. scala help AssociationRulesの作成を理解する必要があります
- 11. google cromeのアップデートがあるたびに新しいポップアップを作成する必要がありますか?
- 12. リストの新しいインスタンスを作成する必要はありますか?
- 13. Shortオブジェクトを明示的に作成する必要はありませんか?
- 14. Cordaにノードを再デプロイせずに新しいノードを作成する必要がありますか?
- 15. 共有属性の親テーブルを作成する必要がありますか?
- 16. メール作成ページから特定のアクティビティに戻る必要があります
- 17. テストファイルにヘルパーメソッドを作成する必要がありますか?
- 18. SqlParameterオブジェクト:なぜすべてのオプションを混乱させる必要がありますか?
- 19. build.sbtとproject * .scalaファイルを混在させるにはbuild.sbtですべて統一する必要がありますか?
- 20. スレッドごとに新しいCallableオブジェクトを作成する必要はありますか?ここ
- 21. 外部APIのJSONファイルへのPUTリクエストを作成する必要があります。特定のフィールドを更新する必要があります
- 22. 注入された特性は処分する必要がありますか?
- 23. 新しいオブジェクトを挿入する前にリストからオブジェクトを削除する必要がありますか?
- 24. キャメルケースのテーブル名を作成するための属性を作成する必要がありますか?
- 25. 接続を保持する必要がありますか、毎回新しい接続を作成する必要がありますか?
- 26. Scalaの構成データ - Readerモナドを使用する必要がありますか?
- 27. 新しいアプリケーションIDを作成する場合、プロビジョニングプロファイルを再作成する必要があります
- 28. エンティティのインタフェースを作成する必要がありますか?
- 29. 新しいVertexBuffer3D&IndexBuffer3Dを使用する各Program3Dに対して作成する必要がありますか?
- 30. テストスイートを作成する必要はありませんか?
groupBy()と変更可能なコレクションを呼び出すと、変更可能なマップが返されます。 –
groupByが変更可能なMapを返すことを実演できますか?私はここに示されているようなコンパイラのエラーが出ます(http://gist.github.com/245062)。 –
私はそれが可変セットの不変のマップを返すと思いますか?それにもかかわらず、私はマップをまったく必要としません、私はマルチマップが欲しいです。 –