【发布时间】:2014-09-17 12:53:36
【问题描述】:
我正在尝试将键可遍历的地图展平,从某种意义上说:
Map( Set(1, 2, 3) -> 'A', Set(4, 5, 6) -> 'B')
应该变平为:
Map(5 -> B, 1 -> A, 6 -> B, 2 -> A, 3 -> A, 4 -> B)
这是我所做的:
def fuse[A, B, T <: Traversable[A]](mapOfTravs: Map[T, B]): Map[A, B] = {
val pairs = for {
trav <- mapOfTravs.keys
key <- trav
} yield (key, mapOfTravs(trav))
pairs.toMap
}
它有效。但是:
有更简单的方法吗?
-
我对 Scala 类型系统不太满意,我相信这可以改进。每当我使用我的函数时,我都必须明确指定类型:
val map2 = Map( Set(1, 2, 3) -> 'A', Set(4, 5, 6) -> 'B') val fused2 = fuse[Int, Char, Set[Int]](map2) val map1: Map[Traversable[Int], Char] = Map( Set(1, 2, 3) -> 'A', Set(4, 5, 6) -> 'B') val fused1 = fuse[Int, Char, Traversable[Int]](map1)
P.S.:这个fuse函数在key traversables有一个非空交集时没有多大意义。
【问题讨论】:
标签: scala