es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Existe alguna forma en Scala de seleccionar un subconjunto de List[Array[Int]] verificando cada elemento de cada Array[Int]?

Nuevo en Scala. Tengo datos en forma de List[Array[Int]], cada Array[Int] tiene n enteros, llamémoslo a. También hay dos Array[int], llámelos c y d, también de longitud n. Quiero comparar cada elemento de cada fila de a con el elemento correspondiente de c y d (es decir, del mismo índice) y devolver aquellas filas que coinciden con c o d.

No hay nada en juego aquí, solo estoy aprendiendo Scala por mi cuenta.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para resolver este problema, puedes usar el método filter en Scala para comparar cada elemento de cada fila de List[Array[Int]] con el elemento correspondiente de Array[Int] c y d, y devolver las filas que coincidan con c o d. Aquí hay un ejemplo de código que hace esto:

    val a = List(Array(1, 2, 3), Array(4, 5, 6), Array(7, 8, 9))
    val c = Array(1, 2, 3)
    val d = Array(4, 5, 9)
    
    // define una función que compara una fila de a con c y d
    def matchRow(row: Array[Int], c: Array[Int], d: Array[Int]): Boolean = {
      row.corresponds(c)(_ == _) || row.corresponds(d)(_ == _)
    }
    
    // filtra a y mantiene solo las filas que coinciden con c o d
    val result = a.filter(row => matchRow(row, c, d))
    

    En este código, primero definimos una List[Array[Int]] a y dos Array[Int] c y d. Luego, definimos una función matchRow que toma una fila de a y la compara con c y d utilizando el método corresponds en Scala. El método corresponds aplica un operador binario a cada elemento de la fila y el elemento correspondiente del array, y devuelve true si todas las comparaciones son verdaderas. Aquí, utilizamos el operador de igualdad _ == _ para comparar los elementos.

    Finalmente, aplicamos el método filter a a y mantenemos solo aquellas filas que coinciden con c o d utilizando la función matchRow. El resultado se almacena en la variable result.

    Este código debería producir la siguiente salida:

    List(Array(1, 2, 3), Array(4, 5, 6))
    

    que son las filas de a que coinciden con c o d.

Comments are closed.