Lars Blumberg February 2016

How to compare two arrays in Kotlin?

Given some arrays in Kotlin

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

Are there built-in functions to the Kotlin std-lib that tests two arrays for (value) equality for each element?

Thus resulting in:

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

equals() is actually returning false in both cases, but maybe there are built-in functions to Kotlin that one could use?

There is the static function java.utils.Arrays.deepEquals(a.toTypedArray(), b.toTypedArray()) but I would rather prefer an instance method as it would work better with optionals.

Answers


mfulton26 February 2016

As of the Kotlin 1.0 RC there are no "built-in functions to the Kotlin std-lib that tests two arrays for (value) equality for each element."

"Arrays are always compared using equals(), as all other objects" (Feedback Request: Limitations on Data Classes | Kotlin Blog).

So a.equals(b) will only return true if a and b reference the same array.

You can, however, create your own "optionals"-friendly methods using extension functions. e.g.:

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

P.S. The comments on Feedback Request: Limitations on Data Classes | Kotlin Blog are worth a read as well, specifically comment 39364.

Post Status

Asked in February 2016
Viewed 1,070 times
Voted 8
Answered 1 times

Search




Leave an answer