Wie schreibe ich eine Non-C-ähnliche For-Schleife in Swift 2.2+?

8

Ich habe Xcode (7.3) aktualisiert und es gibt viele Änderungen; C-like für Ausdrücke wird veraltet sein. Für ein einfaches Beispiel,

%Vor%

Wie schreibe ich diese klare und einfache C-like for-Schleife, um mit den neuen Änderungen konform zu sein?

%Vor%

Aktualisierung. Eine weitere Variante

%Vor%

Und mehr ...

%Vor%

Update2 Nach mehreren Vorschlägen für mich ist die while-Schleife vorzuziehen universelle Substitution für alle Fälle komplizierter als das einfache Beispiel der C-like for-Schleife (geeignet für in-Ausdruck). Sie müssen nicht jedes Mal nach einem neuen Ansatz suchen.
Zum Beispiel: Statt

%Vor%

Ich kann

verwenden %Vor%     
VYT 22.03.2016, 13:28
quelle

7 Antworten

1

Im schlimmsten Fall können Sie es in eine while-Schleife konvertieren.

%Vor%

- BEARBEITEN -

Weil Sie sagten, "while loop ist die bevorzugte universelle Substitution für alle Fälle, die komplizierter sind als das einfache Beispiel einer C-ähnlichen for-Schleife" ... Ich möchte meine Antwort erweitern. Ich möchte nicht für einen Haufen schlechten Code verantwortlich sein ...

In den meisten Fällen gibt es eine einfache For-in-Schleife, die mit der Situation umgehen kann:

%Vor%

Für Ihren letzten Fall könnten Sie berechtigt sein, ein for-Look zu verwenden, aber das ist ein extrem seltener Kantenfall.

Verwerfen Sie Ihren Code nicht mit for-Schleifen.

    
Daniel T. 22.03.2016, 13:33
quelle
8

charls (alte) Antwort wird abstürzen. Sie möchten 0..<array.count :

%Vor%

Wenn Sie etwas wie Ihre i / j Schleife wollen, können Sie stride verwenden und i 's Nachfolger bekommen:

%Vor%

Stellen Sie sicher, dass i.successor() überprüft wird, falls Sie außerhalb der Grenzen bleiben.

    
JAL 22.03.2016 13:35
quelle
5
%Vor%

Hier brauchen Sie den Elementindex überhaupt nicht, Sie können also einfach Aufzählung der Array-Elemente:

%Vor%
%Vor%

Um über Paare benachbarter Elemente zu iterieren, verwenden Sie zip() und dropFirst() :

%Vor%

Ausgabe:

%Vor%

Für andere Entfernungen verwenden Sie dropFirst(n) :

%Vor%

Ausgabe:

%Vor%

Es gibt wahrscheinlich viele Lösungen zu tun

%Vor%

ohne eine C-style for-Schleife, hier ist eine:

%Vor%     
Martin R 22.03.2016 14:52
quelle
2

Wenn Sie etwas mit nachfolgenden Paaren machen wollen, gibt es viele andere Möglichkeiten, dies zu tun.

So etwas würde funktionieren ...

%Vor%     
Fogmeister 22.03.2016 13:40
quelle
2
%Vor%

Was Sie wirklich tun, ist hier das Aufzählen von zwei parallelen Sequenzen. Erstellen Sie also diese Sequenzen und verwenden Sie zip , um sie in eine einzelne Sequenz umzuwandeln.

    
user4691305 22.03.2016 14:42
quelle
2

Führen Sie die Aufzählung durch

%Vor%

oder um Nachbarn zu vergleichen

%Vor%

oder zippen und aufzählen

%Vor%

Ergebnis

%Vor%     
vikingosegundo 22.03.2016 13:48
quelle
1

um benachbarte Elemente aus demselben Array zu vergleichen, können Sie

verwenden %Vor%

druckt

%Vor%

mehr 'generischer' Ansatz ohne Verwendung von tiefgestellten aber separaten Generatoren

%Vor%     
user3441734 22.03.2016 14:11
quelle

Tags und Links