检查两个阵列是否共享相同的元素

时间:2014-06-08 19:24:01

标签: arrays swift

我已将此代码写入.playgraound

var a = [1, 2, 3]
var b = a
var c = a

if b === c
{
    "b and c still share the same array elements."
}
else
{
    "b and c now refer to two independent sets of array elements."
}

结果是" b和c现在引用两组独立的数组元素"但在" Swift编程语言" Apple说那个

  

下面的示例使用“same to”运算符(===)来检查b和c是否仍然共享相同的数组元素。

你能解释一下他们与众不同的原因吗?

2 个答案:

答案 0 :(得分:2)

这本书说的原因

  

结果是" b和c现在引用两组独立的数组元素"

是本书前面的代码停止了bc之间通过a分配给他们两者的数组共享:

b.unshare() // Page 306, line 3

数组a已从bc取消共享,方法是在第305页的第1行附加一个元素。

使用显示的代码将打印"b and c still share the same array elements."消息。

答案 1 :(得分:0)

b === c测试c如果您更改b的其中一个元素,或者反之亦然,将会发生什么。在您的示例中,b === c的计算结果为true,因此当您更改b的元素时:

var a = [1, 2, 3]
var b = a
var c = a

b[1] = 10

您会看到c

中反映的更改
c[1] // returns 10

您可以使用unshare()方法确保b引用独立的数组实例:

b.unshare()
b === c // returns false

b[2] = 10
c[2] // returns 3