我正在尝试使用contains(...)来查找2D数组中是否存在数组,但是即使它在数组中,返回值也是false。为什么以及如何使它起作用?

val obs = arrayOf (arrayOf(5, 5),arrayOf(4, 2),arrayOf(2, 3))
println(obs.contains(arrayOf(2, 3))) // false

val obs1 = arrayListOf (arrayListOf(5, 5), arrayListOf(4, 2), arrayListOf(2, 3))
println(obs1.contains(arrayListOf(2, 3))) // true

最佳答案

仅当obs.contains(arrayOf(2,3))的引用等于arrayOf(2,3)中的任何引用时,obs才会产生true。换句话说,它对数组引用引用相等而不是内容相等。

您可以使用contentEquals获得所需的结果:

println(obs.any { it.contentEquals(arrayOf(2,3)) }) // true

第二个版本按预期进行打印,因为对集合进行了结构比较。

您可能会发现感兴趣的What you didn’t know about arrays in Kotlin

10-08 03:06