Cercando di capire in che modo si confrontano rapidamente gli array.Confronto di array 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 dice che ci sono ottimizzazioni dietro la scena su copie di array. Sembra che a volte - non sempre - le strutture siano effettivamente copiate o meno.
Detto,
1) è == iterazione di tutto l'array di eseguire un confronto elemento basato? (sembra) -> Che ne dici di prestazioni/utilizzo della memoria su array molto grandi allora?
2) Siamo sicuri che == restituirà mai true se tutti gli elementi sono uguali? Ho brutti ricordi di == su Java Strings
3) C'è un modo per verificare se myArray1 e myArray2 utilizzano tecnicamente la stessa "posizione di memoria"/puntatore/ecc.? Ho capito come funziona l'ottimizzazione e i potenziali avvertimenti.
Grazie.
Il confronto diretto del puntatore è '===' – Anorak
Non funziona. === dice -> [String] non è conforme a AnyObject –
@Anorak '===' è solo per le classi, 'Array' è una struttura. – Kirsteins