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

给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())但我宁愿一个实例方法,因为它会更好地与optionals。

Kotlin 1.1引入了按内容比较数组的扩展: contentEquals和contentDeepEquals 。

这些扩展名是infix ,所以你可以用下面的方法来使用它们:

 val areEqual = arr1 contentEquals arr2 

在Kotlin 1.1中,可以使用contentEqualscontentDeepEquals来比较两个数组的结构是否相等。 例如:

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

在Kotlin 1.0中,没有“Kotlin std-lib的内置函数,它为每个元素的(值)相等性测试两个数组。

“数组总是使用equals()和所有其他对象进行比较”( 反馈请求:对数据类的限制| Kotlin博客 )。

所以a.equals(b)只会返回true如果ab引用相同的数组。

但是,您可以使用扩展功能创建您自己的“选项” – 友好的方法。 例如:

 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()进行比较。