2014-02-19 3 views
2

Есть ли сжатый способ выполнения следующего отображения в Scala?Идиоматический способ извлечения списков из списка кортежей

val listOfTuples: List[Tuple2[Foo, Bar]] = ??? 
val (foos, bars) = listOfTuples // foo:List[Foo], bar:List[Bar] 

Я видел othersmapList[Tuple[X, X]] на List[List[X]], а затем transpose перечень, хотя это работает только с кортежами, состоящих из параметров однородных типа.

+1

Это ответ, который вы хотите: http://stackoverflow.com/a/17281359/406435 – senia

+0

я на самом деле связаны с это в вопросе, хотя я не читал достаточно далеко, чтобы найти * тот * ответ, который действительно то, что я хочу (не map & transpose, как самый проголосовавший ответ). –

ответ

9

Вы должны использовать метод unzip так:

val (foos, bars) = listOfTuples.unzip 

Существует также метод unzip3 для коллекций Tuple3.

+0

Блестящий и извините за то, что вы недостаточно читаете список List, чтобы найти его :( –

0

И если для арностью 3 до 22 вы могли бы сделать это с product-collections:

val foos = listOfTuples._1 
val bars = listOfTuples._2 
Смежные вопросы