Gibt es in Swift eine Funktion, die überprüft, ob alle Elemente eines Arrays den gleichen Wert haben? In meinem Fall ist es ein Array vom Typ Int
. Ich weiß, dass ich mit einer einfachen for-Schleife darüber iterieren kann. Ich habe mich nur gefragt, ob etwas eingebaut ist und schneller.
Jede Methode muss über alle Elemente iterieren, bis ein anderes Element gefunden wird:
%Vor% Anstatt einer expliziten Schleife können Sie die Funktion contains()
verwenden:
Wenn die Array-Elemente Hashable
sind (z. B. Int
), können Sie das tun
Erstellen Sie ein Set
(verfügbar seit Swift 1.2) von den Array-Elementen und prüfen Sie, ob es genau ein Element hat.
Ein kurzer Benchmarking-Test ergab, dass die "contains" -Methode viel schneller ist als die "set" -Methode
für ein Array von 1.000.000 ganzen Zahlen, insbesondere wenn die Elemente sind
nicht alle gleich. Dies macht Sinn, weil contains()
so schnell zurückgibt
als ein nicht übereinstimmendes Element gefunden wird, während Set(array)
immer
durchläuft das gesamte Array.
Auch die Methode "contains" ist gleich schnell oder etwas schneller als eine explizite Schleife.
Hier ist ein einfacher Benchmark-Code. Natürlich können die Ergebnisse variieren mit der Array-Größe, der Anzahl der verschiedenen Elemente und dem Datentyp der Elemente.
%Vor%Ergebnisse (auf einem MacBook Pro, Release-Konfiguration):
%Vor% Mit array[1_000] = 2
sind die Ergebnisse
Update für Swift 2 / Xcode 7: Aufgrund verschiedener Änderungen im Swift Syntax wird die Funktion jetzt als
geschrieben %Vor%Aber Sie können es jetzt auch als eine Erweiterungsmethode für Arrays definieren:
%Vor%