タプルのリストがあるとしますList[(A, B)]
。に変換する最良の方法はmultimap
何A
ですかSet[B]
? 不変 を構築できますmultimap
か?
9931 次
2 に答える
22
不変の multimap を構築できますか?
MultiMap
Scala 標準ライブラリにはありません。もちろん、自分で書くこともできます。
それをマルチマップに変換する最良の方法は何ですか?
import scala.collection.mutable.{HashMap, Set, MultiMap}
def list2multimap[A, B](list: List[(A, B)]) =
list.foldLeft(new HashMap[A, Set[B]] with MultiMap[A, B]){(acc, pair) => acc.addBinding(pair._1, pair._2)}
于 2011-08-26T20:23:01.533 に答える
19
私は少し混乱しています。 にマップされMultimap
ません。多くの値を持つことができる場所にマップされます。不変なものが必要なので、これを変更しますが、あなたが望んでいたことの1つではありません。A
Set[B]
A
B
B
Map[A, Set[B]]
Multimap
// This is your list of (A, B)
val l = List((1, "hi"),
(2, "there"),
(1, "what's"),
(3, "up?"))
// Group it and snip out the duplicate 'A'
// i.e. it initially is Map[A, List[(A, B)]] and we're going to convert it
// to Map[A, Set[B]]
val m = l.groupBy(e => e._1).mapValues(e => e.map(x => x._2).toSet)
println(m)
// Prints: Map(3 -> Set(up?), 1 -> Set(hi, what's), 2 -> Set(there))
于 2011-08-26T20:07:25.930 に答える