gpt4 book ai didi

arrays - swift 2.2 : Non +1 increasing iterator loops

转载 作者:行者123 更新时间:2023-11-30 13:34:40 26 4
gpt4 key购买 nike

我想知道有关 Swift 2.2 中非 +1 递增迭代器循环的最佳解决方案,因为旧样式现已弃用:

for (var i = 0; i < planets.count; i += 1) {
let string = planets[i]
if (string == "Venus" || string == "Saturn") {
i += 2
}
}

我的第一个解决方案是使用有效的while

var i = 0
while i < planets.count {
let string = planets[i]
if (string == "Venus" || string == "Saturn") {
i += 2
}
i += 1
}

但是在整个代码中多次使用它并不是很方便。所以我创建了一个数组扩展,它似乎也可以工作:

extension Array {
func loopIncrement(callback: (inout i: Int) -> ()) {
var index: Int = 0
while index < self.count {
callback(i: &index)
index += 1
}
}
func loopDecrement(callback: (inout i: Int) -> ()) {
var index: Int = self.count - 1
while index >= 0 {
callback(i: &index)
index -= 1
}
}
}

像这样使用它:

planets.loopIncrement { (i) in
let string = planets[i]
if (string == "Venus" || string == "Saturn") {
i += 2
}
}

planets.loopDecrement { (i) in
let string = planets[i]
if (string == "Venus" || string == "Saturn") {
i -= 2
}
}

目前这很好,但我确信有一种更快捷的方法来解决这个问题。

所以让我们在这里开始讨论。非常感谢任何帮助!

如果您想查看的话,这是 Playground 文件:NonPlusOneIncrementLoops.playground

示例:

在下面的示例中,您可以看到哪里需要实时更改循环索引。有一个 printObject 数组,其中包含 PrintObject 类,这些类定义其 printText 应打印到调试区域的次数。 printCount 属性是随机生成的,因此在循环之前是未知的。

class PrintObject {
var printCount: Int = 0
var printText: String = "<Missing>"
}

var printObjects = [PrintObject]()

for i in 0...6 {
let randomCount = Int(arc4random_uniform(2)) + 1
let printObject = PrintObject()
printObject.printCount = randomCount
printObject.printText = "This is line \(i)"
printObjects.append(printObject)
}

printObjects.loopIncrement { (i) in
let printObject = printObjects[i]
printObject.printCount -= 1
if printObject.printCount > 0 {
i -= 1
}
print(printObject.printText)
}

这显然是一个简单的示例,但它可能会让某些人更清楚在哪些情况下更改循环索引是有意义的。

最佳答案

如果您只想要每第二个元素

evens = Array(1...10).filter { $0 % 2 == 0 }

代码过于冗长

func isEven(number: Int) -> Bool {
return number % 2 == 0
}

evens = Array(1...10).filter(isEven)

关于arrays - swift 2.2 : Non +1 increasing iterator loops,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36217423/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com