que estoy tratando de zip
múltiples secuencias para formar una larga tupla:Zip múltiples secuencias
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
Lo que me sale:
List[(((Int, Char), String), Boolean)] =
List((((1,a),Alpha),true), (((2,b),Beta),false), (((3,c),Gamma),false))
Sin embargo, me gustaría obtener una secuencia de planas tuplas :
List[(Int, Char, String, Boolean)] =
List((1,a,Alpha,true), (2,b,Beta,false), (3,c,Gamma,false))
ahora que puedo hacer:
List(ints, chars, strings, bools).transpose
Pero vuelve débilmente tipada List[List[Any]]
. También puedo hacer (ints, chars, strings).zipped
, pero zipped
funciona solo en 2-tuplas y 3-tuplas.
¿Existe alguna manera de comprimir (arbitrariamente) el número de secuencias de igual longitud fácilmente?
+1, gracias. Actualmente estoy usando el enfoque 'map', pero' t._1._1, t._1._2, t._2, t._3' no es muy legible, y en mi caso necesito una 5-tupla, que empeora las cosas Realmente no necesito admitir listas de longitud arbitraria, pero * lo suficientemente largo *. Pensé que tal vez haya algunos métodos especializados que devuelven tuplas con tipado fuerte de longitud correcta, pero entiendo tu punto sobre el problema 'Tuple1'-'Tuple22'. –
Con la coincidencia de patrones, puede deshacerse de la sintaxis ilegible '._1, ._2' etc.:' def f2 [A, B, C] (t: ((A, B), C)) t coincidencia {case ((a, b), c) => (a, b, c)} ' – Jesper