我有一个要转换成一对地图的数据序列;每个映射代表原始序列的单独转换。我可以生成元组,这些元组将在原始输入序列的单次传递中构成每个映射,如下所示:
val entries: Seq[((A, B), (A, C))] = input map { x =>
val key = genKey(x)
val tuple1 = key -> f(x)
val tuple2 = key -> g(x)
}
我可以通过两次遍历生成的 seq 来单独创建每个映射,如下所示:
val map1 = (entries map { case(e1, _) => e1 }).toMap
val map2 = (entries map { case(_, e2) => e2 }).toMap
我认为可能有一种方法可以在地图上一次完成整个转换,这样我就可以做这样的事情:
val (map1, map2) = (entries accumulate { case(e1, e2) => // add e1 to map1, add e2 to map2 })
foldLeft 可能会这样做,但也许有更优雅的东西?