为什么直接在ArraySlice上调用变异方法不会触发写时复制?

时间:2019-10-26 03:51:12

标签: arrays swift copy-on-write

为什么直接在ArraySlice上调用变异方法不会触发写时复制?唯一的区别是将切片分配给变量,对吧?

我的示例代码:

swap()

while(i!=600){
    if(i%2==0){
        circle(40+i,40,30);
        line(40+i,70,(a+b)/2+i,90);
        line(40+i,70,(b+a)/2+i,90);

    }else{
        circle(40+i,40,30);
        line(40+i,70,a+i,90);
        line(40+i,70,b+i,90);
    }
    i++;
    delay(10);
    cleardevice();
    }

1 个答案:

答案 0 :(得分:0)

在您的代码中,您写道:

var numbers = [15, 40, 10, 30, 60, 25, 5, 100]
numbers[0..<4].sort()
numbers
// [10, 15, 30, 40, 60, 25, 5, 100]

在这种情况下,您可以直接作用于数组的子集。您对数组的前四个元素([0]至[3])进行排序(就位)。然后,当您输出numbers时,您会看到前4个元素处于排序顺序。

var n = numbers[4..<8]
n.sort()
numbers
// [10, 15, 30, 40, 60, 25, 5, 100]

然后,您将数组的下四个元素([4]至[7])复制 new 变量n中。然后,您进行sort()n。请注意,numbers未被触摸。

您为什么期望发生一些不同的事情?