【问题标题】:if integer is greater than x but less than y (Swift)如果整数大于 x 但小于 y (Swift)
【发布时间】:2023-03-03 01:08:02
【问题描述】:

我想知道是否有任何平滑的方法可以快速检查范围内的整数值。

我有一个整数,可以是 0 到 1000 之间的任意数字

我想为“如果整数在 300 和 700 之间 - 执行此操作,如果为其他数字 - 执行其他操作”编写一个 if 语句

我会写:

if integer > 300 {
    if integer < 700 {
      //do something else1
    }
    //do something
} else {
    // do something else2

}

但我想尽量减少要编写的代码量,因为“do something else1”和“do something else2”应该是相同的

看来你不会写:

if 300 < integer < 700 {

} else {

}

我尝试过使用

if integer == 300..<700 {
}

但这也没有用。有人有建议吗?

【问题讨论】:

标签: swift if-statement integer range


【解决方案1】:

你试过了吗?

if integer > 300 && integer < 700 {
    // do something
} else {
    // do something else               
}

希望对你有帮助

【讨论】:

  • 谢谢,确实有效!我认为可能有一种更短的方式来编写它而不用 && 和“整数”重复,但这可能是最好的方式。谢谢
  • 实际上我确实找到了 Martin R 指出的更短的方法你可以写: if 300 ... 700 ~= integer { }
  • William +1 但使用半开运算符!
【解决方案2】:

有一个类型,HalfOpenInterval,可以用... 构造,并且有一个.contains 方法:

if (301..<700).contains(integer) {
    // etc.
}

注意,301..&lt;700 自己会创建一个 Range,它没有包含函数,但是 Swift 的类型推断会看到你正在调用一个只有 HalfOpenInterval 有的方法,所以选择那个特别的过载。

我提到这一点只是因为如果您想将间隔存储为变量而不是内联使用它,您需要指定:

let interval = 301..<700 as HalfOpenInterval
if interval.contains(integer) {
  // etc.
}

【讨论】:

  • 有趣的是,在 Xcode 6.3 处于优化模式下,这也提供了与我刚刚添加到 stackoverflow.com/a/24893494/1187415if integer &gt; 300 &amp;&amp; integer &lt; 700if 300 ... 700 ~= integer 相同的“最佳”汇编代码。
  • 是的,显然所有标准库代码都可以内联(而且 swift 编译器非常热衷于内联 -O)
  • 正如 Willian Larson 指出的那样,包含运算符可用于更短的语法,在 if 300..&lt;700 ~= integer {
  • 我不确定这是否真的是 ~= 运算符的预期用途,我认为这更多是作为 switch 的底层机制,而不是应该单独使用的东西。 .contains 更清楚地表明意图恕我直言。
猜你喜欢
  • 1970-01-01
  • 2017-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-29
  • 2012-09-28
相关资源
最近更新 更多