这是一个评论而不是一个问题。
学术问题:如何检查短路数组是否与其未分类的版本“不同”?
(...或者,这是数组的标准排序行为吗?)
看来当前的Array.sort()会自我变异,即使它在技术上通过'let'是不可变的。也就是说,只要数组的长度没有改变,CONSTANT数组的内容就是 mutable 。
以下代码段演示了这种情况:
let a = [5,4,3,2,1]
let a2 = [5,4,3,2,1]
(a == a2) // *true*
(a === a2) // *false*
let b = sort(a)
a // [1,2,3,4,5]
b // [1,2,3,4,5]
(a == b) // *true*
(a === b) // *true*
我能理解(a === a2)是假的;因为他们是两个不同的阵列。
但是我如何判断两个数组之间的区别,数组#1和它的排序版本?
看来排序一个数组只是变异自己;因此我必须复制一份,然后使用'=='检查差异。
答案 0 :(得分:2)
您可以使用copy()
强制复制而不是对同一数组进行排序。
let b = sort(a.copy())
a // [5,4,3,2,1]
b // [1,2,3,4,5]
(a == b) // *false*
(a === b) // *false*
即使在Swift中赋予常量,数组也有一些非常奇怪的behavior。 Apple已经表示他们会在稍后的测试中解决这个问题,所以这个问题和解决方案可能并不总是有效。