包含2个循环的函数

时间:2016-03-24 23:41:59

标签: swift swift3

在这里有一个排序功能,当我将 - 递减器更改为-= 1时,除去了一个错误,但我仍然得到syyntax错误。

 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 个答案:

答案 0 :(得分:4)

如有疑问,任何C风格的for,无论其位置或嵌套级别如何,都可以简单地更改为while循环:

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

虽然您可以在案件中使用stride。 (我不记得如何使用它,特别是在Swift 3中。)

答案 1 :(得分:3)

stride确实是要走的路。此外,您似乎可以从使用enumerate()中受益。试试这个:

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

答案 2 :(得分: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)
    }
}

答案 3 :(得分:-4)

正确的答案是使用包含的Swift sort函数。您的所有代码都是如此,为什么要重新发明轮子? (顺便说一下,你的代码将每个元素与自己进行比较,这是完全没有必要的,然后它会加载extract,然后在你进行构建数组时更好地移动元素。)