2013-02-24 6 views
0

у меня есть 3 IndexedSequences, и я мог бы совместить их следующим образом:Scala Объединить последовательности в тройки

indSeq1 = (a,b,c) 
indSeq2 = (1,2,3) 
indSeq3 = (!,@,#) 

result:([a,1,!],[b,2,@],[c,3,#]) 

Я использовал молнии, но я получаю ([a,b,c],[1,2,3],[!,@,#]) Как сделать это в Скале, я хочу, выход на быть индексированной.

ответ

0

Попробуйте запустить транспонирование после замятия.

2

Это не то, что я получаю, когда я это сделать:

scala> val indSeq1 = Seq('a', 'b', 'c') 
indSeq1: Seq[Char] = List(a, b, c) 

scala> val indSeq2 = Seq(1,2,3) 
indSeq2: Seq[Int] = List(1, 2, 3) 

scala> val indSeq3 = Seq('!', '@', '#') 
indSeq3: Seq[Char] = List(!, @, #) 

scala> (indSeq1, indSeq2, indSeq3).zipped 
res30: scala.runtime.Tuple3Zipped[Char,Seq[Char],Int,Seq[Int],Char,Seq[Char]] = [email protected] 

scala> res30.toSeq 
res31: Seq[(Char, Int, Char)] = Stream((a,1,!), ?) 

scala> res30.toList 
res32: List[(Char, Int, Char)] = List((a,1,!), (b,2,@), (c,3,#)) 

scala> res30.toIndexedSeq 
res33: scala.collection.immutable.IndexedSeq[(Char, Int, Char)] = Vector((a,1,!), (b,2,@), (c,3,#)) 
2

Просто используйте метод invert на Tuple3 следующим образом:

scala> val s1 = IndexedSeq('a', 'b', 'c') 
s1: IndexedSeq[Char] = Vector(a, b, c) 

scala> val s2 = Seq(1, 2, 3) 
s2: Seq[Int] = List(1, 2, 3) 

scala> val s3 = Seq('!, '@, '#) 
s3: Seq[Symbol] = List('!, '@, '#) 

scala> (s1, s2, s3).invert 
res0: IndexedSeq[(Char, Int, Symbol)] = Vector((a,1,'!), (b,2,'@), (c,3,'#)) 
Смежные вопросы