Как сравнить два массива в Котлине?

Учитывая некоторые массивы в Котлине

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

Существуют ли встроенные функции для std-lib Kotlin, которые тестируют два массива для (значения) равенства для каждого элемента?

Таким образом, получается:

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

equals() фактически возвращает false в обоих случаях, но, возможно, есть встроенные функции для Kotlin, которые можно использовать?

Существует статическая функция java.utils.Arrays.deepEquals(a.toTypedArray(), b.toTypedArray()) но я предпочел бы использовать метод экземпляра, поскольку он лучше работал бы с опциями.

    В Kotlin 1.1 были добавлены расширения для сравнения массивов по контенту: contentEquals и contentDeepEquals .

    Эти расширения являются инфиксами , поэтому вы можете использовать их следующим образом:

     val areEqual = arr1 contentEquals arr2 

    В Kotlin 1.1 вы можете использовать contentDeepEquals и contentDeepEquals для сравнения двух массивов для структурного равенства. например:

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

    В Kotlin 1.0 нет встроенных функций для std-lib Kotlin, которые проверяют два массива для (значения) равенства для каждого элемента ».

    «Массивы всегда сравниваются с помощью equals() , как и все другие объекты» ( запрос обратной связи: ограничения в классах данных | блог Kotlin ).

    Таким образом, a.equals(b) вернет true только если a и b ссылаются на один и тот же массив.

    Тем не менее, вы можете создать свои собственные «дополнительные» методы, используя расширенные функции . например:

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

    PS Комментарии по запросу обратной связи: ограничения в классах данных | Блог Kotlin тоже стоит прочитать, в частности, комментарий 39364 .

    Для простых равных (не глубоких равно!):

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

    Этот код будет сравнивать размер и элементы. Элементы сравниваются с .equals() .