-1

ここにソート機能があり、---= 1デクリメンターを変更すると、エラーが1つなくなりますが、それでも構文エラーが発生します。

 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 {
4

4 に答える 4

4

疑わしい場合は、位置やネストレベルに関係なく、C スタイルを簡単にループforに変更できます。while

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

あなたの場合は逃げることができるかもしれませんがstride。(特にSwift 3ではそうではありませんが、頭からそれを使用する方法を覚えていません。)

于 2016-03-24T23:46:51.637 に答える
3

stride確かに行く方法です。また、使用することでメリットが得られるようですenumerate()。これを試して:

for (firstIndex, key) in extract.enumerate() {
    for secondIndex in firstIndex.stride(through: 0, by: -1) {
        ...
    }
}
于 2016-03-24T23:57:02.320 に答える
2

これをチェックしてください:http://bjmiller.me/post/137624096422/on-c-style-for-loops-removed-from-swift-3

減少のように:

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)
    }
}
于 2016-03-24T23:52:05.517 に答える
-4

正解は、付属の Swiftsort関数をそのまま使用することです。あなたのコードが行うのはそれだけです。(残念なことに、コードは各要素をそれ自体と比較しますが、これはまったく不要extractです。また、配列を構築するだけの方がよい場合は、要素をロードして移動します。)

于 2016-03-25T00:02:23.113 に答える