У меня есть Tuple2
от List[List[String]]
, и я хотел бы иметь возможность преобразовать кортеж в список, чтобы затем использовать List.transpose()
. Есть какой-либо способ сделать это? Кроме того, я знаю это Pair
, хотя я всегда являюсь поклонником общих решений.
Существуют ли какие-либо методы, включенные в Scala, для преобразования кортежей в списки?
Ответ 1
Работает с любым кортежем (scala 2.8):
myTuple.productIterator.toList
Scala 2.7:
(0 to (myTuple.productArity-1)).map(myTuple.productElement(_)).toList
Не знаете, как сохранить информацию о типе для общего продукта или кортежа, но для Tuple2:
def tuple2ToList[T](t: (T,T)): List[T] = List(t._1, t._2)
Вы могли бы, конечно, определить похожие преобразования типа для всех кортежей (до 22).
Ответ 2
Использование Shapeless -
@ import syntax.std.tuple._
import syntax.std.tuple._
@ (1,2,3).toList
res21: List[Int] = List(1, 2, 3)
@ (1,2,3,4,3,3,3,3,3,3,3).toList
res22: List[Int] = List(1, 2, 3, 4, 3, 3, 3, 3, 3, 3, 3)
Обратите внимание, что информация о типе не теряется при использовании Shapeless toList
.