¿Cómo comparar dos matrices en Kotlin?

Dadas algunas matrices en Kotlin

let a = arrayOf("first", "second") val b = arrayOf("first", "second") val c = arrayOf("1st", "2nd") 

¿Hay funciones integradas en Kotlin std-lib que testingn dos arreglos para igualdad (de valor) para cada elemento?

Por lo tanto, resulta en:

 a.equals(b) // true a.equals(c) // false 

equals() realidad devuelve false en ambos casos, pero tal vez haya funciones integradas a Kotlin que uno podría usar.

Existe la function estática java.utils.Arrays.deepEquals(a.toTypedArray(), b.toTypedArray()) pero preferiría un método de instancia, ya que funcionaría mejor con opcionales.

Kotlin 1.1 introdujo extensiones para comparar matrices por contenido: contentEquals y contentDeepEquals .

Estas extensiones son infijas , por lo que puedes usarlas de la siguiente manera:

 val areEqual = arr1 contentEquals arr2 

En Kotlin 1.1, puede usar contentEquals y contentDeepEquals para comparar dos matrices para la igualdad estructural . p.ej:

 a contentEquals b // true b contentEquals c // false 

En Kotlin 1.0, no hay "funciones integradas para Kotlin std-lib que prueben dos arreglos para igualdad (de valor) para cada elemento".

"Las matrices siempre se comparan utilizando equals() , como todos los demás objects" ( Solicitud de comentarios: Limitaciones en las classs de datos | Blog de Kotlin ).

Entonces a.equals(b) solo regresará true si a y b reference a la misma matriz.

Sin embargo, puede crear sus propios methods "opcionales" amigables utilizando funciones de extensión . p.ej:

 fun Array<*>.equalsArray(other: Array<*>) = Arrays.equals(this, other) fun Array<*>.deepEqualsArray(other: Array<*>) = Arrays.deepEquals(this, other) 

PS Los comentarios sobre la request de comentarios: limitaciones en las classs de datos | También vale la pena leer el Blog de Kotlin , específicamente el comentario 39364 .

Para un simple igual (¡no profundo es igual!):

 otherArray.size == array.size && otherArray.filter { !array.contains(it) }.isEmpty() 

Este código comparará el tamaño y los artículos. Los artículos se comparan con .equals() .

  • ¿Hay alguna manera de crear una matriz no nula a partir de un range?
  • Inicialización de matriz de subprocesss múltiples en Kotlin
  • ¿Cómo implementar readLine () !!. ToIntArray () en Kotlin?
  • Inicializando matrices en kotlin
  • Toma la input en la matriz con el bucle
  • ¿Cómo crear un IntArray de tamaño fijo e inicializar el array más adelante en Kotlin?
  • Función Kotlin Array init
  • Kotlin equivalente para el set de classs de C ++
  • indexOf en Matrices de Kotlin
  • ¿Manera de Kotlin de filtrar valores máximos de 2 arrays?
  • ¿Cómo inicializar una matriz en Kotlin?