首页 > 解决方案 > Scala:一次映射和解压缩列表

问题描述

我有一个元组列表如下:

[(8, 3, 9), (10, 3, 0), (-37, 4, 1)]

我想映射此列表并同时将其解压缩一次。这是一个带有两次通过的示例(或者至少我强烈假设它需要两次通过,如果不是那么我们就在这里完成了:D)

val l = List((8, 3, 9), (10, 3, 0), (-37, 4, 1))
val (list1, list2) = l.map({ el => (el._1, el._2) }).unzip

当然,我可以通过循环列表并附加到集合来以命令式的方式执行此操作,但是有没有办法以简洁的功能方式执行此操作?我猜我基本上需要一个 lazy map,然后是一个 eager unzip

标签: scalalistdictionarycollectionstuples

解决方案


这对于您陈述的问题非常具体;它不能解决更普遍的问题。尝试:

val (list1, list2, _) = l.unzip3

编辑

公平地说,在找到 implementation 之后scala.collection.generic.GenericTraversableTemplate.unzip3,这是一个非常无功能的循环,它构建 3 个列表并返回它们,与原始问题中的描述非常相似。至少它是一次传球,而不仅仅是埋葬两次传球。


推荐阅读