Próbuję zip
wielu sekwencji tworząc długi krotki:pocztowy wielokrotne sekwencje
val ints = List(1,2,3)
val chars = List('a', 'b', 'c')
val strings = List("Alpha", "Beta", "Gamma")
val bools = List(true, false, false)
ints zip chars zip strings zip bools
Co dostaję:
List[(((Int, Char), String), Boolean)] =
List((((1,a),Alpha),true), (((2,b),Beta),false), (((3,c),Gamma),false))
Jednak chciałbym uzyskać sekwencję płaskich krotek :
List[(Int, Char, String, Boolean)] =
List((1,a,Alpha,true), (2,b,Beta,false), (3,c,Gamma,false))
Teraz mogę zrobić:
List(ints, chars, strings, bools).transpose
Ale wraca słabo typowane List[List[Any]]
. Również mogę zrobić (ints, chars, strings).zipped
, ale zipped
działa tylko na 2-tki i 3-tki.
Czy istnieje sposób na łatwe zip (dowolne) liczby sekwencji o równej długości?
+1, dzięki. Obecnie używam podejścia 'map', ale' t._1._1, t._1._2, t._2, t._3' nie jest bardzo czytelny - w moim przypadku potrzebuję 5-krotnej czyni sprawę jeszcze gorszą. Naprawdę nie potrzebuję obsługi dowolnych list długości, ale * wystarczająco długo *. Być może istnieją pewne wyspecjalizowane metody, które zwracają silnie typowane krotki o odpowiedniej długości, ale rozumiem, że chodzi o problem 'Tuple1' -'Tuple22'. –
Dzięki dopasowaniu do wzorca można pozbyć się nieczytelnej składni "._1, ._2" itd .: 'def f2 [A, B, C] (t: ((A, B), C)) = t dopasowanie {case ((a, b), c) => (a, b, c)} ' – Jesper