scala 中是不是有一些 unzip 的扩展版本适用于任何 List[n-tuple] 而不仅仅是像 Unzip 这样的 List[pairs]?

Posted

技术标签:

【中文标题】scala 中是不是有一些 unzip 的扩展版本适用于任何 List[n-tuple] 而不仅仅是像 Unzip 这样的 List[pairs]?【英文标题】:Is there some extended version of unzip in scala which works for any List[n-tuple] instead of just List[pairs] like Unzip?scala 中是否有一些 unzip 的扩展版本适用于任何 List[n-tuple] 而不仅仅是像 Unzip 这样的 List[pairs]? 【发布时间】:2016-11-04 07:06:23 【问题描述】:

如果我有一个三元组列表,我想要三个单独的列表。还有比这更好的方法吗:

(listA, listB, listC) = (list.map(_._1), list.map(_._2). list.map(_._3))

哪个适用于任何 n 元组?

编辑:虽然我在写这个问题时不知道存在三个 unzip3,但是有没有办法编写一个函数来获取一般的 n 个列表?

【问题讨论】:

查看unzip3 尝试泛化元组的问题是没有类型Tuple。现在只有Tuple2Tuple3 的类型不同,Tuple2[Int,Int]Tuple2Int,Char] 的类型不同。一旦你尝试泛化元组处理,比如使用productIterator,你就会开始丢失元组元素上有价值的类型信息。 您对基于 Shapeless 的解决方案感兴趣吗?这绝对是可能的(参见例如these answers)。 【参考方案1】:

这个怎么样?

scala> val array = Array((1, 2, 3), (4, 5, 6), (7, 8, 9))
array: Array[(Int, Int, Int)] = Array((1,2,3), (4,5,6), (7,8,9))

scala> val tripleArray = array.unzip3
tripleArray: (Array[Int], Array[Int], Array[Int]) = (Array(1, 4, 7),Array(2, 5,8),Array(3, 6, 9))

【讨论】:

我不知道 unzip3,它适用于我的 3 元组目的,但有一些通用函数或编写通用函数的方法吗?

以上是关于scala 中是不是有一些 unzip 的扩展版本适用于任何 List[n-tuple] 而不仅仅是像 Unzip 这样的 List[pairs]?的主要内容,如果未能解决你的问题,请参考以下文章

sbt/Scala 是不是有类似于 Bundler/pip >= 或 ~= 的“兼容版本”?

Scala 的扩展性是不是优于其他 JVM 语言?

Kotlin的类型具体化在Java或Scala中是不可能实现的?

Scala,扩展具有通用特征的对象

如何在一个库中支持多个 Scala 版本

使用 sbt 构建 scala 项目时,scala 的版本有啥关系?