arrays - 如何比较 Kotlin 中的两个数组?

标签 arrays equals kotlin

给定 Kotlin 中的一些数组

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

Kotlin 标准库中是否有内置函数可以测试两个数组的每个元素的(值)相等性?

因此导致:

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

equals() 实际上在这两种情况下都返回 false,但也许 Kotlin 有可以使用的内置函数?

有静态函数 java.utils.Arrays.deepEquals(a.toTypedArray(), b.toTypedArray()) 但我更喜欢实例方法,因为它可以更好地与可选项一起使用.

最佳答案

在 Kotlin 1.1 中,您可以使用 contentEqualscontentDeepEquals比较两个数组的 structural 相等性。例如:

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

在 Kotlin 1.0 中,没有“Kotlin 标准库的内置函数可以测试两个数组的每个元素的(值)相等性。”

“数组总是使用 equals() 进行比较,就像所有其他对象一样”( Feedback Request: Limitations on Data Classes | Kotlin Blog )。

所以 a.equals(b) 只会在 ab 引用同一个数组时返回 true .

但是,您可以使用 extension functions 创建自己的“可选”友好方法.例如:

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

附:评论 Feedback Request: Limitations on Data Classes | Kotlin Blog也值得一读,特别是 comment 39364 .

关于arrays - 如何比较 Kotlin 中的两个数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35272761/

相关文章:

android - 如何获取 JSONArray 的第一个值?

java - 需要使用Scanner读取文件但不知道如何比较

java - 为什么我可以在java中创建一个0行5列的二维数组?

android - Jetpack Compose 和 Room DB : Performance overhead of auto-saving user input?

Kotlin 从 JSON 获取值(value)

arrays - 如何将 [ ][2]string 转换为 map[string] 中的字符串?

java - 无法准确评估字符串

Java 反射等于问题

java - 是否应该在 equals 和 hashCode 中考虑 JPA 实体的 id 字段?

android - Room Persistence @Relation 在 Java 中工作,但在 Kotlin 中不工作