Überprüfen Sie, ob alle Elemente eines Arrays in Swift den gleichen Wert haben

7

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.

    
nevos 12.04.2015, 09:56
quelle

1 Antwort

21

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:

%Vor%

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.

%Vor%

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

%Vor%

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%     
Martin R 12.04.2015, 10:00
quelle

Tags und Links