在Swift中,我需要创建一个简单的for-condition-increment循环,其中3的倍数为3到100。到目前为止,我有:
var multiplesOfThree: [String] = []
for var counter = 0; counter < 30; ++counter {
multiplesOfThree.append("0")
if counter == 3 {
multiplesOfThree.append("3")
} else if counter == 6 {
multiplesOfThree.append("6")
} else if counter == 9 {
multiplesOfThree.append("9")
}
println("Adding \(multiplesOfThree[counter]) to the Array.")
}
我想用以下内容替换所有if和else if语句: if(index%3 == 0)
但我不确定正确的语法是什么?另外,如果我有一个IF语句,我需要一个.append行来添加到数组吗?
答案 0 :(得分:6)
你正走在正确的轨道上。几点说明:
..<
运算符(开放范围运算符),Swift提供了一种更简洁的方法来迭代固定数量的整数。if
语句与模数运算符完全正确\(expression)
。这称为String Interpolation 以下是工作代码:
var multiplesOfThree: [String] = []
for test in 0..<100 {
if (test % 3 == 0) {
multiplesOfThree.append("\(test)")
}
}
但是,没有理由迭代每个数字。您可以继续添加3,直到达到最大值:
var multiplesOfThree: [String] = []
var multiple = 0
while multiple < 100 {
multiplesOfThree.append("\(multiple)")
multiple += 3
}
正如rickster在评论中指出的那样,您也可以使用带有by
方法的Strided Range以更简洁的方式执行此操作:
var multiplesOfThree: [String] = []
for multiple in stride(from: 0, to: 100, by: 3) {
multiplesOfThree.append("\(multiple)")
}
更高级,您可以使用map
功能在一行中执行此操作。 map方法允许您对数组中的每个元素应用转换:
let multiplesOfThree = Array(map(stride(from: 0, to: 100, by: 3), { "\($0)" }))
注意:要理解最终的代码,您需要了解closures周围的语法。