конвертировать List[Tuple2[A,B]] в Tuple2[Seq[A],Seq[B]]

Застрял здесь, пытаясь преобразовать список кортежей класса case в кортеж последовательностей и многократно присвоить результат.

val items = repo.foo.list // gives me a List[(A,B)]

Я могу выполнить множественное назначение следующим образом:

val(a,b) = (items.map(_._1).toSeq, items.map(_._2).toSeq)

но было бы лучше сделать в 1 шаг, по строкам:

val(a,b) = repo.foo.list.map{case(a,b) => (a,b)}

person virtualeyes    schedule 22.10.2012    source источник


Ответы (2)


Я не уверен, правильно ли я понял вопрос. Может быть, unzip работает на то, что вы хотите?

Вот ссылка с некоторыми примерами: http://daily-scala.blogspot.de/2010/03/unzip.html

person Eduardo    schedule 22.10.2012
comment
+1 да, продолжайте забывать об этом ;-) Теперь, как преобразовать в Seq все за 1 операцию (см. обновленный вопрос) - person virtualeyes; 22.10.2012
comment
да, спрашивал о преобразовании в Seq (unzip дает мне список). Однако не имеет значения, компилятор, похоже, молча преобразует List в Seq для методов, требующих Seq - person virtualeyes; 22.10.2012
comment
Нет никакого скрытого преобразования, кроме простого наследования, поскольку List расширяет Seq (косвенно через LinearSeq). - person Kristian Domagala; 22.10.2012
comment
@KristianDomagala верно, преобразовать было неправильным словом, возможно, его рассматривали так, как если бы оно было более понятным. - person virtualeyes; 22.10.2012

В более общем случае вы можете посмотреть product-collections. CollSeqN является одновременно Seq[TupleN[A1..An]] и TupleN[Seq[A1..An]]

В вашем примере вы можете извлечь Seqs так:

items._1
items._2
...
person Mark Lister    schedule 08.03.2014