给定Kotlin中的一些数组
let a = arrayOf("first", "second")
val b = arrayOf("first", "second")
val c = arrayOf("1st", "2nd")
Kotlin std-lib是否有内置功能可以测试两个数组的每个元素的(值)相等性?
因此导致:
a.equals(b) // true
a.equals(c) // false
equals()
false
在两种情况下实际上都返回了,但是也许Kotlin有内置函数可以使用?
有静态函数,java.utils.Arrays.deepEquals(a.toTypedArray(), b.toTypedArray())
但我宁愿使用实例方法,因为它与可选方法一起使用会更好。
在Kotlin 1.1中,您可以使用contentEquals
和contentDeepEquals
比较两个数组以实现结构相等。例如:
a contentEquals b // true
b contentEquals c // false
在Kotlin 1.0中,没有“ Kotlin std-lib的内置函数来测试两个数组的每个元素的(值)相等性”。
“总是使用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。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句