Cố gắng hiểu cách so sánh các mảng nhanh chóng.So sánh các mảng trong swift
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 cho biết có tối ưu hóa đằng sau hiện trường trên bản sao mảng. Hình như đôi khi - không phải luôn luôn - các cấu trúc thực sự được sao chép hay không.
Điều đó nói rằng,
1) là == lặp qua tất cả các mảng để thực hiện so sánh dựa trên yếu tố? (trông giống như nó) -> Làm thế nào về hiệu suất/bộ nhớ sử dụng trên mảng rất lớn sau đó?
2) Chúng tôi chắc chắn == sẽ bao giờ trả về true nếu tất cả các phần tử đều bằng nhau? Tôi có những ký ức xấu về == trên Java Strings
3) Có cách nào để kiểm tra xem myArray1 và myArray2 có sử dụng kỹ thuật "cùng một vị trí bộ nhớ"/con trỏ/v.v không? Tôi sau khi hiểu được cách tối ưu hóa hoạt động và tiềm năng cảnh báo.
Cảm ơn.
So sánh con trỏ trực tiếp là '===' – Anorak
Không hoạt động. === nói -> [Chuỗi] không phù hợp với AnyObject –
@Anorak '===' chỉ dành cho các lớp, 'Mảng' là một cấu trúc. – Kirsteins