给定 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 中,您可以使用 contentEquals
和 contentDeepEquals
比较两个数组的 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)
只会在 a
和 b
引用同一个数组时返回 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/