Versuchen zu verstehen, wie schnell Arrays vergleicht.Vergleichen Sie Arrays in 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 sagt, es gibt Optimierungen hinter der Szene auf Array-Kopien. Sieht aus wie manchmal - nicht immer - Strukturen werden tatsächlich kopiert oder nicht.
Das heißt,
1) == alle Array-Iteration über einen elementbasierten Vergleich durchzuführen? (sieht so aus) -> Wie wäre es dann mit Leistung/Speicherverbrauch auf sehr großen Arrays?
2) Sind wir sicher == wird jemals wahr zurückkehren, wenn alle Elemente gleich sind? Ich habe schlechte Erinnerungen an == Java Strings
3) Gibt es eine Möglichkeit zu überprüfen, ob myArray1 und myArray2 technisch die gleiche "Speicherort"/Zeiger/etc. verwenden? Ich bin nach dem Verständnis, wie die Optimierung funktioniert und mögliche Vorbehalte.
Danke.
Direkter Zeigervergleich ist '===' – Anorak
Funktioniert nicht. === sagt -> [String] entspricht nicht AnyObject –
@Anorak '===' ist nur für Klassen, 'Array' ist eine Struktur. – Kirsteins