Учитывая некоторые массивы в Котлине
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()
.