【问题标题】:Swift C-style loop [duplicate]Swift C 风格的循环 [重复]
【发布时间】:2016-12-20 14:04:43
【问题描述】:
for (var i = 1; i < 1024; i *= 2) {
    print(i)
}

for in 循环如何做到这一点?

给定的解决方案是+= 运算符而不是*= 运算符。请为*=提供解决方案,谢谢。

【问题讨论】:

标签: swift for-loop for-in-loop


【解决方案1】:

在 Swift 3 中你可以做到

for f in sequence(first: 1, next: { $0 < (1024 / 2) ? $0 * 2 : nil }) {
    print(f)
}

sequence 函数的概念在documentation 中进行了描述。

打印一个无限列表很简单,代码就是

for f in sequence(first: 1, next: {$0 * 2}) {
    print(f)
}

由于我们希望程序在某个点停止,我们使用 三元运算符 ? 在达到最大值后终止列表。 由于我们要打印的最后一个值是512,所以我们必须加倍的最后一个值是256。对于不满足条件&lt; (1024 / 2)512,我们有nil 并因此停止。

【讨论】:

  • 哦,是的,这比 C 风格的方式要清晰得多。前进一步,后退两步。投赞成票。
  • 请注意,C 循环(来自问题)排除值 1024。您的代码将包含该数字。
  • @MadPhysicist:你的步幅会产生 1,3,5,7,... 而不是 1,2,4,8,16,....
  • 谢谢,但您的代码包含 1024。
  • 这有点过于复杂了。还有更多可读的解决方案,例如:for i in sequence(first: 1, next: {$0 * 2}).prefix(while: {$0 &lt; 1024})
猜你喜欢
  • 2016-07-10
  • 1970-01-01
  • 2017-07-22
  • 2018-07-09
  • 1970-01-01
  • 2020-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多