首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将If/Else从if(x == y=x == y x x == z)缩短为if(x ==y=x==y\x== z)

将If/Else从if(x == y=x == y x x == z)缩短为if(x ==y=x==y\x== z)
EN

Stack Overflow用户
提问于 2015-11-17 12:57:15
回答 4查看 2.1K关注 0票数 0

我正在制作一个应用程序,我必须在其中放很多if/else语句。我知道在其他一些编码语言中,你可以像标题中那样做,但我不确定你是否可以用Swift来做。

你如何缩短这一点:

代码语言:javascript
复制
if x == y || x == z {
    //do something
}

像这样的事情:

代码语言:javascript
复制
if x == y || z {
    //do something
}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-11-17 13:04:49

我推断,没有合理的语言(迅速包含),它在逻辑或||之间分发比较的||

您编写它的方式-- x == y || x == z --是最紧凑的形式。

票数 4
EN

Stack Overflow用户

发布于 2015-11-17 13:05:20

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

代码语言:javascript
复制
let (x, y, z) = (3, 8, 3)

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

如果您正在比较对象(如UIImage),请使用containsObject而不是contains

代码语言:javascript
复制
if [x, y, z].containsObject(y) {
    //True
}
票数 8
EN

Stack Overflow用户

发布于 2015-11-17 14:06:19

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

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

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33757555

复制
相关文章

相似问题

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