为什么直接在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();
}
答案 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
未被触摸。
您为什么期望发生一些不同的事情?