Почему вызов метода мутации непосредственно в ArraySlice не вызывает копирования при записи? - PullRequest
0 голосов
/ 26 октября 2019

Почему вызов метода мутации непосредственно в ArraySlice не запускает копирование при записи? Единственная разница - это присвоение среза переменной, верно?

Мои примеры кодов:

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

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

1 Ответ

0 голосов
/ 27 октября 2019

В своем коде вы написали:

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

В этом случае вы непосредственно воздействуете на подмножество массива. Вы сортируете (на месте) первые 4 элемента массива (от [0] до [3]). Затем, когда вы выводите numbers, вы видите, что первые 4 элемента расположены в отсортированном порядке.

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

Затем вы копируете следующие 4 элемента массива ([4] в[7]) в новую переменную n. Затем вы сортируете () n. Обратите внимание, что numbers не тронут.

Почему вы ожидали, что произойдет что-то другое?

...