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
。现在只有Tuple2
与Tuple3
的类型不同,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 >= 或 ~= 的“兼容版本”?