包含 2 个循环的函数
function containing 2 loops
这里有一个排序功能,当我将 -- 递减器更改为 -= 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 {
如有疑问,任何 C 风格 for
,无论其位置或嵌套级别如何,都可以简单地更改为 while
循环:
var secondIndex = firstIndex
while secondIndex > -1 {
defer { i -= 1 }
// loop body
}
尽管在您的情况下您可能能够逃脱 stride
。 (虽然我不记得如何使用它,尤其是在 Swift 3 中。)
看看这个: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)
}
}
stride
确实是要走的路。此外,您似乎会从使用 enumerate()
中获益。试试这个:
for (firstIndex, key) in extract.enumerate() {
for secondIndex in firstIndex.stride(through: 0, by: -1) {
...
}
}
正确答案是只使用包含的 Swift sort
函数。这就是您的所有代码,那么为什么要重新发明轮子呢? (顺便说一句,你的代码将每个元素与自身进行比较,这是完全没有必要的,它会加载 extract
然后在其中移动元素,而最好只是在你进行时构建数组。)
这里有一个排序功能,当我将 -- 递减器更改为 -= 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 {
如有疑问,任何 C 风格 for
,无论其位置或嵌套级别如何,都可以简单地更改为 while
循环:
var secondIndex = firstIndex
while secondIndex > -1 {
defer { i -= 1 }
// loop body
}
尽管在您的情况下您可能能够逃脱 stride
。 (虽然我不记得如何使用它,尤其是在 Swift 3 中。)
看看这个: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)
}
}
stride
确实是要走的路。此外,您似乎会从使用 enumerate()
中获益。试试这个:
for (firstIndex, key) in extract.enumerate() {
for secondIndex in firstIndex.stride(through: 0, by: -1) {
...
}
}
正确答案是只使用包含的 Swift sort
函数。这就是您的所有代码,那么为什么要重新发明轮子呢? (顺便说一句,你的代码将每个元素与自身进行比较,这是完全没有必要的,它会加载 extract
然后在其中移动元素,而最好只是在你进行时构建数组。)