scala - 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
。
解决方案
这对于您陈述的问题非常具体;它不能解决更普遍的问题。尝试:
val (list1, list2, _) = l.unzip3
编辑
公平地说,在找到 implementation 之后scala.collection.generic.GenericTraversableTemplate.unzip3
,这是一个非常无功能的循环,它构建 3 个列表并返回它们,与原始问题中的描述非常相似。至少它是一次传球,而不仅仅是埋葬两次传球。
推荐阅读
- sql-server - 如果列表 sql server 中不存在数据,则返回值
- java - 如何通过输出变量正确格式化,以使其与标题对齐?例如姓氏,用户中的名字等
- git - 源树软重置后丢失所有更改
- java - 如何将 PDDocument 的所有页面保存在单独的 .pdf 文件中?
- bit - Bitsrc:错误:标记组件时出现未知对象类型“窗口”
- java - 方法体内的 lambda 表达式
- php - 从 woocommerce 页面中删除重力形式动作
- java - 如何在自动化中找到类似于 getText() 的元素定位器
- angular - 在 ng2-charts 中隐藏三个工具提示之一
- anychart - 如何将 xGrid 线与数据点对齐?