2016-03-24 5 views
-6

Haben Sie eine Sortierfunktion hier und wenn ich die - Dekrementierer zu -= 1, die einen Fehler loswerden, aber ich bekomme immer noch die Syyntax-Fehler.Funktion enthält 2 Loops

func iSortBort(myList: Array) -> Array { 

    var extract = myList 

    for firstIndex in 0..<extract.count { 

     let key = extract[firstIndex] 

     for var secondIndex = firstIndex; secondIndex > -1; secondIndex--1 { 
+2

Dies hat _NOTHING_ damit zu tun, dass es sich um eine Schleife in einer Schleife handelt. 'für var secondIndex = firstIndex; zweiter Index> -1; secondIndex - 1' Das ist eine C-for-Schleife. Sie müssen stattdessen 'for ... in' verwenden. – matt

+1

Es ist am besten, wenn du versuchst, in deiner Frage einen neutralen Ton beizubehalten, indem du Kommentare wie "deine kleine Welt" hinzufügst, dann wirst du nur noch weiter runter gehen. – ColGraff

Antwort

3

stride ist in der Tat der Weg zu gehen. Außerdem scheint es, als würden Sie davon profitieren, enumerate() zu verwenden. Versuchen Sie folgendes:

for (firstIndex, key) in extract.enumerate() { 
    for secondIndex in firstIndex.stride(through: 0, by: -1) { 
     ... 
    } 
} 
+0

@TokyoToo Gern geschehen! Die Leute hier können ein bisschen hart für Anfänger sein. Nicht jeder ist es jedoch. Lerne einfach weiter und schon bald wirst du all diese Dinge leicht finden. :) –

+0

Ersetzen Sie "durch" durch 'zu'. Das mag ein wenig verwirrend sein, aber 'stride' hat grundsätzlich zwei Versionen. Eine für '<=' and '> =' ('through'), die andere für' <' and '> '(' to'). Siehe [hier] (http://swiftdoc.org/v2.2/type/AnyRandomAccessIndex/#dash-anchor-9). Sie können also 'through' durch' to' ersetzen oder 'extract.count' durch' extract.count-1' ersetzen. –

+0

Übrigens kannst du einfach sagen "by: 1" statt "by: + 1". :) –

4

Im Zweifelsfall kann jeder C-Stil for, unabhängig von seiner Position oder Verschachtelungsebene kann trivialerweise zu einer while Schleife geändert werden:

var secondIndex = firstIndex 
while secondIndex > -1 { 
    defer { i -= 1 } 
    // loop body 
} 

wenn Sie in der Lage sein könnten, um wegzuzukommen mit stride in Ihrem Fall. (Ich erinnere mich nicht, wie es aber von meinem Kopf verwenden, insbesondere nicht in Swift 3.)

-4

Die richtige Antwort ist die mitgelieferte Swift sort Funktion nur zu nutzen. Das ist alles, was dein Code macht, warum erfindest du das Rad neu? (Schlecht übrigens, Ihr Code vergleicht jedes Element mit sich selbst, was völlig unnötig ist, und es lädt extract und bewegt dann die Elemente herum, wenn es besser wäre, das Array aufzubauen, während Sie entlang gehen.)

+1

Dies löst nicht das allgemeine Problem, es ist unhöflich, und es versucht nicht zu verstehen, warum dieser Code überhaupt geschrieben wird. – zneak