将多个变量与同一个表达式进行比较
Compare multiple variables to the same expression
我正在尝试将多个变量与一个表达式进行比较,如下所示:
if 1 <= x && x <= 5 &&
1 <= y && y <= 5 &&
1 <= z && z <= 5 {
// Code to run if true
}
我找到了一个question related to comparing a variable to multiple specific
values,这不是我想要的,因为它不是不等式中的比较
有什么办法可以缩短它吗?
例如缩短 1 <= x && x <= 5
这样的不等式,或者让我能够以其他方式轻松比较 x
、y
和 z
?
使用范围!
if (1...5).contains(x) &&
(1...5).contains(y) &&
(1...5).contains(z) {
}
或者,创建一个闭包来检查是否有东西在范围内:
let inRange: (Int) -> Bool = (1...5).contains
if inRange(x) && inRange(y) && inRange(z) {
}
正如 Hamish 所建议的,Swift 4.2 中的 allSatisfy
方法可以像这样作为扩展实现:
extension Sequence {
func allSatisfy(_ predicate: (Element) throws -> Bool) rethrows -> Bool {
return try !contains { try !predicate([=12=]) }
}
}
另一种选择:匹配范围元组:
if case (1...5, 1...5, 1...5) = (x, y, z) {
}
或者使用 switch 语句匹配一个或多个
范围元组:
switch (x, y, z) {
case (1...5, 1...5, 1...5):
print("all between 1 and 5")
case (..<0, ..<0, ..<0):
print("all negative")
default:
break
}
(比较 Can I use the range operator with if statement in Swift?。)
可能是这样的:
if [x,y,z].compactMap{ (1...5).contains([=10=]) }.contains(true) {
//Do stuff
}
我正在尝试将多个变量与一个表达式进行比较,如下所示:
if 1 <= x && x <= 5 &&
1 <= y && y <= 5 &&
1 <= z && z <= 5 {
// Code to run if true
}
我找到了一个question related to comparing a variable to multiple specific
values,这不是我想要的,因为它不是不等式中的比较
有什么办法可以缩短它吗?
例如缩短 1 <= x && x <= 5
这样的不等式,或者让我能够以其他方式轻松比较 x
、y
和 z
?
使用范围!
if (1...5).contains(x) &&
(1...5).contains(y) &&
(1...5).contains(z) {
}
或者,创建一个闭包来检查是否有东西在范围内:
let inRange: (Int) -> Bool = (1...5).contains
if inRange(x) && inRange(y) && inRange(z) {
}
正如 Hamish 所建议的,Swift 4.2 中的 allSatisfy
方法可以像这样作为扩展实现:
extension Sequence {
func allSatisfy(_ predicate: (Element) throws -> Bool) rethrows -> Bool {
return try !contains { try !predicate([=12=]) }
}
}
另一种选择:匹配范围元组:
if case (1...5, 1...5, 1...5) = (x, y, z) {
}
或者使用 switch 语句匹配一个或多个 范围元组:
switch (x, y, z) {
case (1...5, 1...5, 1...5):
print("all between 1 and 5")
case (..<0, ..<0, ..<0):
print("all negative")
default:
break
}
(比较 Can I use the range operator with if statement in Swift?。)
可能是这样的:
if [x,y,z].compactMap{ (1...5).contains([=10=]) }.contains(true) {
//Do stuff
}