Попытка понять, как быстро сравнивает массивы.
var myArray1 : [String] = ["1","2","3","4","5"]
var myArray2 : [String] = ["1","2","3","4","5"]
// 1) Comparing 2 simple arrays
if(myArray1 == myArray2) {
println("Equality")
} else {
println("Equality no")
}
// -> prints equality -> thanks god
// 2) comparing to a "copy" of an array
// swift copies arrays when passed as parameters (as per doc)
func arrayTest(anArray: [String]) -> Bool {
return anArray == myArray1
}
println("Array test 1 is \(arrayTest(myArray1))")
println("Array test 2 is \(arrayTest(myArray2))")
// equality works for both
myArray2.append("test")
println("Array test 2 is \(arrayTest(myArray2))")
// false (obviously)
myArray2.removeAtIndex(5)
println("Array test 2 is \(arrayTest(myArray2))")
// true
Apple говорит, что за сценой есть исправления по копиям массива. Похоже, иногда - не всегда - структуры фактически копируются или нет.
Тем не менее,
1) является == итерированием по всему массиву для выполнения сравнения на основе элементов. (Похоже на то) - > Как насчет использования производительности/памяти на очень больших массивах?
2) Мы уверены, что == когда-нибудь вернется, если все элементы равны? У меня плохие воспоминания о == на Java Strings
3) Есть ли способ проверить, являются ли myArray1 и myArray2 технически одним и тем же "местом памяти" /указателем/и т.д.? Я понимаю, как работает оптимизация и потенциальные оговорки.
Спасибо.