2016-07-07 7 views
1

Ich bin ein iBook über Swift lesen 2.2 und in einem Beispielcode gibt es diese Funktion:iOS Swift: Hilfe dieser Funktion für Schleife verstehen

func minMax(array: [Int]) -> (min: Int, max: Int) { 

    var currentMin = array[0] 
    var currentMax = array[0] 

    for value in array[1..<array.count] { 

     if value < currentMin { 
      currentMin = value 
     } 

     if value > currentMax { 
      currentMax = value 
     } 
    } 

    return (currentMin, currentMax) 
} 

let values = [21, 1, -4, 7, 2, 12, 88, 12021, 456] 
let bounds = minMax(values) 

ich dieses Stück Code versucht, aber ich don ‚t verstehen, wie die for-Schleife hier funktioniert:

for value in array[1..<array.count] 

Warum schreiben Sie nicht: for value in array statt? Das einzige, was mir aufgefallen ist mit:

for value in array[1..<array.count] 

es Looping 2 mal die Min- und Max-Nummer zu finden. Aber mit for value in array, 9 mal natürlich.

+0

> es ist 2 mal schleifen - was bedeutet das? Wie berechnen Sie? –

+0

Ich probierte in Playground und sah auf der rechten Seite (2 mal) – Lapinou

+2

Oh nein ... Mein Spielplatz zeigt mir wie oft meine "if" Aussage wahr ist ... Ich legte einen Ausdruck ("") in meine Schleife und zeigt mir 8 mal ... ich verstehe jetzt ... Sorry für diese blöde Frage:/ – Lapinou

Antwort

3

Die ersten beiden Zeilen der Funktion liest schon das erste Element:

var currentMin = array[0] 
var currentMax = array[0] 

So gibt es keine Notwendigkeit, es wieder zu überprüfen. array[1..<array.count] liefert alle Elemente des Arrays außer die erste (beachten Sie, dass der Bereich beginnt bei 1 anstelle von 0).

+0

Oh mein Gott! Ja ^^ Ich verstehe. Aber ich verstehe nicht, wie es möglich ist, den Min/Max-Wert in nur 2 Loops zu finden. – Lapinou

+4

Vielleicht ist es wert, darauf hinzuweisen, dass Sie 'array.dropFirst()' als Alternative zu 'array [1 .. dfri

+0

Schön! Danke für diesen Tipp! :) – Lapinou

2

Die Schleife sollte nicht mit dem ersten Array-Element beginnen, da dieses erste Element die aktuelle Min/Max-Referenz ist.

Aus diesem Grund beginnt die Schleife beim zweiten indizierten Element (1 in [1..<array.count]).

array[1..<array.count] ist ein Stück des Arrays, das vom zweiten Element zum letzten geht.

Verwandte Themen