具有两个未知值的Swift Range运算符



如果我有两个未知的值,比如xy,那么循环这些值之间的所有值的最佳方式是什么?

例如,给定值x = 0y = 5,我想用值0、1、2、3、4和5做一些事情。如果比较简单的话,结果可以排除0和5。

使用Swift的Range操作符,我可以做这样的事情:

for i in x...y {
    // Do something with i
}

只是我不知道x还是y是更大的值。

适用于靶场操作员的Swift文件规定:

闭合范围运算符(a...b)定义了从ab的范围,并包括值aba的值不得大于b

这里有很多解决方案。一个非常直接的例子是:

let diff = y - x
for i in 0...abs(diff) {
    let value = min(x, y) + i
    // Do something with value
}

有没有更好或更优雅的方法来实现这一点?

我想写它最明确的方式是:

for i in min(a, b)...max(a, b) {
    // Do something with i
}

要排除第一个和最后一个值,可以增加下限并使用Swift ..<语法:

let lowerLimit = min(a, b) + 1
let upperLimit = max(a, b)
for i in lowerLimit..<upperLimit {
    // Do something with i
}

最新更新