假设我有以下元组列表:
val tuples = listOfStrings.map(string => {
val split = string.split(":")
(split(0), split(1), split(2))
})
我想把split(0)放进一个列表,把split(1)放进另一个列表,以此类推。 实现这个功能的简单方法是:
list1 = tuples.map(x => x._1).toList
list2 = tuples.map(x => x._2).toList
list3 = tuples.map(x => x._3).toList
有没有更加优雅(函数式)的方法,可以在不写三个单独语句的情况下达到上述效果?
tuples.map{t => t._1 :: t._2 :: t._3 :: Nil}.transpose
很不错。+1 - gilad hochTuple2
,那么这个说法是正确的,但它是一个Tuple3
。unzip
只处理解压成对的操作,并且jeshan自己的示例展示了一个Tuple3
列表,而不是Tuple2
。 - Régis Jean-Gillestuple.productIterator.toList
将元组转换为 (of Any) 列表。因此:def unzip(l: List[Product]) = (l map (_.productIterator.toList)).transpose
- Blaisorbladeunzip3
来说是个好发现,我不知道它存在于标准库中。 - Régis Jean-Gilles