我正在制作一个应用程序,我必须在其中放很多if/else语句。我知道在其他一些编码语言中,你可以像标题中那样做,但我不确定你是否可以用Swift来做。
你如何缩短这一点:
if x == y || x == z {
//do something
}像这样的事情:
if x == y || z {
//do something
}发布于 2015-11-17 13:04:49
我推断,没有合理的语言(迅速包含),它在逻辑或||之间分发比较的||。
您编写它的方式-- x == y || x == z --是最紧凑的形式。
发布于 2015-11-17 13:05:20
也许您可以考虑使用数组并检查x是否在数组中,如下面的示例所示:
let (x, y, z) = (3, 8, 3)
if [y, z].contains(x) {
//True
}如果您正在比较对象(如UIImage),请使用containsObject而不是contains
if [x, y, z].containsObject(y) {
//True
}发布于 2015-11-17 14:06:19
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倍。
通常情况下,使用数组的决定是在考虑集合之前作出的。如果您的元素没有任何顺序,并且只能发生一次(这实际上比您想象的更频繁),那么您可能需要一个集合。一个集合为您提供了一些有用的方法,如union、isSubset、interception等,只要将元素放入其中,就可以免费使用。元素类型的唯一附加要求是符合Hashable。
https://stackoverflow.com/questions/33757555
复制相似问题