Acoplar arreglo en Kotlin

Tengo una matriz bidimensional de nodos que quiero aplanar en una sola matriz de todos los nodos utilizando la function de aplanar de las matrices de Kotlin.

val nodes = kotlin.Array(width, { width -> kotlin.Array(height, { height -> Node(width, height) }) }) 

Luego trato de llamar a la function aplanar en la matriz 2D

 nodes.flatten() 

pero obtengo un error: Type mismatch: infernetworking type is Array<Array<Node>> but Array<Array<out ???>> was expected . ¿Hay alguna otra forma en que debería estar haciendo esto?

Las matrices en Kotlin son invariables por lo que un Array<Array<Node>> no es un Array<Array<out T>> (que es el tipo de receptor para flatten ).

Parece que esto se solucionará en Kotlin 1.1: relajar la varianza genérica en Array.flatten · JetBrains / kotlin @ 49ea0f5 .

Hasta que se libere Kotlin 1.1, puede mantener su propia versión de flatten :

 /** * Returns a single list of all elements from all arrays in the given array. */ fun <T> Array<out Array<out T>>.flatten(): List<T> { val result = ArrayList<T>(sumBy { it.size }) for (element in this) { result.addAll(element) } return result } 

Use un flatMap más universal:

 nodes.flatMap {it.asIterable()} 
  • Kotlin y ejemplificación de matriz detallada
  • ¿Cómo serializar / deserializar una matriz de objects personalizados en Kotlin?
  • ¿Cómo crear una matriz vacía en kotlin?
  • ¿Cómo puedo convertir CharArray / Array <Char> en una cadena?
  • ¿Cómo comparar dos matrices en Kotlin?
  • Cómo escribir Short / Int en buffer de 1 byte
  • ¿Manera de Kotlin de filtrar valores máximos de 2 arrays?
  • ¿Cómo inicializar una matriz en Kotlin?
  • Toma la input en la matriz con el bucle
  • indexOf en Matrices de Kotlin
  • Array Int bidimensional en Kotlin