배열을 비교하는 방법을 이해하려고 시도합니다.신속한 배열 비교
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) 모든 요소가 같으면 true가 반환됩니까? Java 문자열에 ==을 기억하지 못합니다.
3) myArray1과 myArray2가 기술적으로 동일한 "메모리 위치"/ 포인터/등을 사용하는지 확인하는 방법이 있습니까? 나는 최적화가 작동하는 방법과 잠재적 인주의 사항을 이해 한 후입니다.
감사합니다.
직접 포인터 비교는'=== ' – Anorak
입니다. 작동하지 않습니다. === says -> [String]이 AnyObject를 따르지 않는다. –
@Anorak'==='은 클래스에만 사용되며,'Array'는 구조체이다. – Kirsteins