-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 回答