Arrays 如何比较Kotlin中的两个阵列?

Arrays 如何比较Kotlin中的两个阵列?,arrays,equals,kotlin,Arrays,Equals,Kotlin,给定Kotlin中的一些数组 设a=arrayOf(“第一”、“第二”) val b=排列(“第一”、“第二”) val c=排列(“第一”、“第二”) Kotlin std库是否有内置函数,用于测试每个元素的两个数组(值)相等性 从而导致: a.equals(b)//true a、 等于(c)//假 在这两种情况下,equals()实际上都返回了false,但也许Kotlin有一些可以使用的内置函数 有一个静态函数java.utils.array.deepEquals(a.toTypedA

给定Kotlin中的一些数组

设a=arrayOf(“第一”、“第二”)
val b=排列(“第一”、“第二”)
val c=排列(“第一”、“第二”)
Kotlin std库是否有内置函数,用于测试每个元素的两个数组(值)相等性

从而导致:

a.equals(b)//true
a、 等于(c)//假
在这两种情况下,
equals()
实际上都返回了
false
,但也许Kotlin有一些可以使用的内置函数

有一个静态函数
java.utils.array.deepEquals(a.toTypedArray(),b.toTypedArray())
,但我更喜欢一个实例方法,因为它可以更好地与optionals配合使用。

在Kotlin 1.1中,您可以使用并比较两个数组的结构相等性。e、 g:

a contentEquals b // true
b contentEquals c // false
在Kotlin 1.0中,没有“Kotlin标准库的内置函数,用于测试每个元素的两个数组(值)相等性。”

“与所有其他对象一样,数组总是使用
equals()
进行比较”()

因此
a.equals(b)
仅在
a
b
引用同一数组时返回
true

但是,您可以使用创建自己的“optionals”——友好的方法。e、 g:

fun数组.equalsArray(其他:数组)=数组.equals(此,其他)
有趣的数组.deepEqualsArray(其他:数组)=数组.deepEquals(此,其他)
特别是,上面的评论也值得一读。

对于简单的equals(而不是deep equals!):


此代码将比较大小和项目。这些项与
.equals()

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

这些扩展是中缀,因此可以通过以下方式使用它们:

val areEqual = arr1 contentEquals arr2

如果要比较两个
集合的内容
忽略顺序,可以添加以下简单扩展:

infix fun <T> Collection<T>.sameContentWith(collection: Collection<T>?)
    = collection?.let { this.size == it.size && this.containsAll(it) }
infix fun Collection.sameContentWith(Collection:Collection?)
=collection?.let{this.size==it.size&&this.containsAll(it)}
…并像这样使用它:

a = mutableListOf<String>()
b = mutableListOf<String>()

isListsHasSameContent = a sameContentWith b
a=mutableListOf()
b=可变列表()的
isListsHasSameContent=a与b相同

在koltin中,如果您的数组或数组列表是a数据类型
您可以简单地比较数组:a和数组:b

像这样

if(a==b)

如果它匹配两个数组的所有值,它将返回简单的布尔值,但是如果您匹配的不是datadata
,则可以使用此扩展将其与单个值进行比较

fun <T> Array<T>.isEqual(comparable: Array<T>): Boolean {
    var isChanged = true

    if (this.size == comparable.size) {
        for (index in 0 until comparable.size) {
            if (this[index] != comparable[index]) {
                isChanged = false
                break
            }
        }
    } else {
        isChanged = false
    }

    return isChanged
}

这可能是扩展函数的情况。这不考虑数组的顺序;但是,一般的方法适用于set.Awesome。这应该是收集的公认答案(如果不使用数组),您在哪里保存此函数以供将来重用?Github回购?
fun <T> Array<T>.isEqual(comparable: Array<T>): Boolean {
    var isChanged = true

    if (this.size == comparable.size) {
        for (index in 0 until comparable.size) {
            if (this[index] != comparable[index]) {
                isChanged = false
                break
            }
        }
    } else {
        isChanged = false
    }

    return isChanged
}
    val a = arrayOf("first", "second")
    val b = arrayOf("first", "second")

    println(a.isEqual(b)) //true

    a[0] = "third"

    println(a.isEqual(b)) //false