¿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() .

  • Cómo usar la biblioteca kmongo para operador de sector
  • ¿Cómo puedo convertir CharArray / Array <Char> en una cadena?
  • Kotlin: forma idiomática de comprobar la matriz contiene valor
  • Kotlin: Colección genérica a matriz genérica
  • string array literal? ¿Cómo lo codigo simplemente?
  • Array Int bidimensional en Kotlin
  • Inicializando matrices en kotlin
  • Arreglo 2D en Kotlin
  • Función Kotlin Array init
  • Cómo convertir String array a Int array en Kotlin?
  • ¿Cómo implementar readLine () !!. ToIntArray () en Kotlin?