在if中缩短if / Else(x == y || x == z)到if(x == y || z)

时间:2015-11-17 12:57:16

标签: swift

我正在创建一个应用程序,我必须放置很多if/else语句。我知道你可以用其他编码语言的标题来做,但我不确定你是否可以在Swift中做到。

你如何缩短这一点:

if x == y || x == z {
    //do something
}

对于这样的事情:

if x == y || z {
    //do something
}

4 个答案:

答案 0 :(得分:8)

也许您可以考虑使用数组并检查数组中是否有x,如下例所示:

let (x, y, z) = (3, 8, 3)

if [y, z].contains(x) {
    //True
}

如果您要比较对象(例如UIImage),请使用containsObject代替contains

if [x, y, z].containsObject(y) {
    //True
}

答案 1 :(得分:3)

我认为没有合理的语言(包括swift),逻辑或==之间分发比较||

你写作的方式 - x == y || x == z - 是最紧凑的形式。

答案 2 :(得分:3)

Jack Greenhill's answer确实朝着正确的方向前进。然而,随着越来越多的值,他的方法将变得非常低效,因为它必须检查数组的每个元素是否相等,因此复杂性O(n)

应该使用一个非常被低估的数据结构,它可以在O(1)中执行此类操作:Set。它使用哈希值快速检查值是否存在。您可以像这样使用它:

let x = 3
let values : Set = [1, 3, 6, 1, 7]    // {6, 7, 3, 1}

if values.contains(x) {
    // ...
}

这需要相同的时间,无论values是否只包含一个或1000个元素。数组的速度会慢1000倍。

通常在决定使用数组之前决定使用数组。如果你的元素没有任何顺序,并且只能出现一次(实际情况通常比你想象的要多),你可能想要一个集合。通过将元素放入其中,集合可以免费为您提供有用的方法,例如unionisSubsetinterception等。元素类型的唯一额外要求是符合Hashable

答案 3 :(得分:0)

也许这就是:

switch x {
case y, z : // do then
default   : // do else
}