Estoy tratando de combinar registros almacenados como List
en uno List
, donde solo una columna con valores no únicos es un List
, el resto de List
son elementos individuales
A continuación se muestra el ejemplo de lo que quiero decir con esto:
val list1 = List(1, 2, "abcd", 5)
val list2 = List(1, 2, "efgh", 5)
Lo que necesito después de fusionarme es algo como esto:
List(1, 2, List("abcd", "efgh"), 5)
Soy muy nueva en Scala, así que agradecería tu ayuda.
2 respuestas
Todas las listas son de la misma longitud y siempre el tercer elemento es el divergente.
Luego use una tupla, sería mejor modelar sus datos, preservaría la información de tipo y sería más fácil hacer la combinación.
def merge[A, B, C, D](t1: (A, B, C, D), t2: (A, B, C, D)): Option[(A, B, (C, C), D)] =
t1 match {
case (a, b, c1, d) =>
t2 match {
case (`a`, `b`, c2, `d`) => Some((a, b, (c1, c2), d))
case _ => None // The other elements not where equal.
}
}
for ((x,y) <- list1.zip(list2)) yield if (x == y) x else List(x,y)
zip
combina las dos listas y le da una lista de pares- la comprensión
for
pasa por estos pares. Si ambos son iguales, solo produce el primer elemento, de lo contrario, una lista que contiene ambos elementos.
Su código podría ser más simple si logra mantener sus listas homogéneas, es decir, todos los elementos que tengan el mismo tipo.
Preguntas relacionadas
Nuevas preguntas
list
La etiqueta de la lista puede referirse a: una lista vinculada (un conjunto ordenado de nodos, cada uno de los cuales hace referencia a su sucesor), o una forma de matriz dinámica. No debe usarse para listas HTML, use [html-lists] en su lugar.