对常量数组进行排序会使自身变异

时间:2014-06-30 19:55:59

标签: arrays sorting swift

这是一个评论而不是一个问题。

学术问题:如何检查短路数组是否与其未分类的版本“不同”?
(...或者,这是数组的标准排序行为吗?)

看来当前的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和它的排序版本?
看来排序一个数组只是变异自己;因此我必须复制一份,然后使用'=='检查差异。

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已经表示他们会在稍后的测试中解决这个问题,所以这个问题和解决方案可能并不总是有效。