首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在for循环中处理负索引的优雅快捷方法

在for循环中处理负索引的优雅快捷方法
EN

Stack Overflow用户
提问于 2016-09-23 03:25:51
回答 2查看 436关注 0票数 0

我对Swift很陌生,并试图找到一种优雅的方法来处理可能为负值的for循环变量。

代码语言:javascript
复制
func funForLoops(_ loop:Int) {
    for i in 0..<loop {
        print("Hello \(i)")
    }
}
funForLoops(1) // prints Hello 0
funForLoops(0) // doesn't execute
funForLoops(-1) // runtime error "fatal error: Can't form Range with  upperBound < lowerBound"

是否有比这更简单的检查方法:

代码语言:javascript
复制
if (loop >= 0) {
    for i in 0..<loop {
        print("Hello \(i)")
    }
}

或者这个:

代码语言:javascript
复制
for i in 0..<(loop >= 0 ? loop : 0) {
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-23 03:34:20

假设您的意思是“如果它是负面的,什么都不做”(这并不明显;您可能意味着“减量”,这就是为什么如果它不是一个例外的话,它将是模棱两可的),您想要的语法是:

代码语言:javascript
复制
for i in 0..<max(0, loop) { }

当有必要时,这是一个很好的语法,但是在大多数情况下,如果值可能是令人惊讶的负值,那么在程序的结构上有一个更深层次的问题,并且应该更早地解决这个问题。

票数 0
EN

Stack Overflow用户

发布于 2016-09-23 09:04:18

是啊,你想得到什么结果还不明显。如果你只需要迭代,不管是负的还是非负的

代码语言:javascript
复制
func forLoop(count: Int) {
  for i in min(count, 0)..<max(0, count) {
    print(i)
  }
}

或者更少的代码

代码语言:javascript
复制
func forLoop(count: Int) {
  for i in 0..<abs(count) {
    print(i)
  }
}

这里唯一的区别是,第一个示例将生成负值的输出,并在0之前停止。

第二个示例将从0开始,以count-1结束。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39652075

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档