2016-03-24 28 views
-6

Burada bir sıralama işlevi var ve bir hatadan kurtulan -= 1 - azaltıcıyı değiştirdiğimde hala syyntax hatası alıyorum. Kurtulmak mümkün olabilir gerçi2 döngüyü içeren işlev

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

:

Şüphe durumunda
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

bir döngüde bir döngü olduğu gerçeği ile yapmak için _NOTHING_ vardır. 'var ikinciIndex = firstIndex için; secondIndex> -1; secondIndex - 1' Döngü için bir C stili budur. Bunun yerine 'in ...' için kullanmanız gerekir. – matt

+1

Sorunuzda nötr bir tonu sürdürmeye çalışırsanız en iyisi, "küçük küçük dünyanız" gibi yorumların eklenmesi yalnızca daha fazla indirgemeye neden olacaktır. – ColGraff

cevap

3

stride gerçekten de gitme yolu. Ayrıca, enumerate() kullanmanın yararı olacaktır. Bu deneyin:

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

@TokyoToo Rica ederim! Buradaki insanlar yeni başlayanlar için biraz zor olabilir. Yine de herkes değil. Sadece öğrenmeye devam et, ve yakında tüm bu şeyleri kolayca bulabilirsin. :) –

+0

'' yi '' 'ile değiştirin. Bu biraz kafa karıştırıcı olabilir, ancak 'adım' temelde iki versiyona sahiptir. <=' and '> = '(' through') için bir, diğeri ise <' and '> ('to'). Bakınız [burada] (http://swiftdoc.org/v2.2/type/AnyRandomAccessIndex/#dash-anchor-9). Yani '' 'ile' ''' yerine geçebilir ya da 'extract.count' yerine' extract.count - 1' ile değiştirebilirsiniz. –

+0

Bu arada, 'by: 1 yerine': ile: 1 yerine basitçe söyleyebilirsiniz. :) –

4

, herhangi bir C tarzı for, ne olursa olsun pozisyon veya yuvalama düzeyi, trivially bir while döngü değiştirilebilir Sizin durumunuzda stride ile.

2

this out (ben Swift özellikle değil, olsa başımın kapalı 3. nasıl kullanılacağını hatırlamıyorum): gibi http://bjmiller.me/post/137624096422/on-c-style-for-loops-removed-from-swift-3

azaltma için:

for secondIndex in (0...firstIndex).reverse() { 
    print("comparing \(key) and \(myList[secondIndex])") 
    if key < extract[secondIndex] { 
     extract.removeAtIndex(secondIndex + 1) 
     extract.insert(key, atIndex: secondIndex) 
    } 
} 
+0

sadece -1 durumunda gerçekten bir fark yoktur. Sadece nasıl uyarlıyorsun? – Wingzero

-4

doğru cevap sadece dahil Swift sort fonksiyonunu kullanmaktır. Tüm kodunuz bu yüzden tekerleği neden yeniden icat ediyor? (Kötü bir şekilde btw, kodunuz her öğeyi tamamen gereksiz olarak karşılaştırır ve extract'u yükler ve sonra da öğeyi dizine ekledikçe dizinin etrafını oluşturmak daha iyi olur.)

+1

Bu genel sorunu çözmez, kabadır ve bu kodun neden yazıldığını anlamaya çalışmaz. – zneak

İlgili konular