有沒有人知道測試三個數字是否相同的捷徑?我知道這個作品:比較三個值是否相等
if number1 == number2 && number2 == number3 {
}
但我想要更乾淨的東西,如;
if number1 == number2 == number3 {
}
這是非常重要的,因爲我比較了很多不同的值。
有沒有人知道測試三個數字是否相同的捷徑?我知道這個作品:比較三個值是否相等
if number1 == number2 && number2 == number3 {
}
但我想要更乾淨的東西,如;
if number1 == number2 == number3 {
}
這是非常重要的,因爲我比較了很多不同的值。
您可以使用元組的權力和平等的傳遞性質。
if (number1, number2) == (number2, number3) {
}
這個IF的條款,只有當number1
是等於number2
和number2
是等於number3
是真實的。這意味着3個值必須相等。
您可以在陣列和使用集添加它們:
var someSet = NSSet(array: [2,2,2])
if someSet.count == 1 {
print("Same values")
}
你可以使用一組
if Set([number1, number2, number3]).count == 1 {
...
但我要說它並不像多爲透明,如果條款
該帖子提到「我正在比較很多不同的值」,所以這是比使用元組更可持續的方法。 –
不知道其他任何東西,我建議將它包裝在一個函數中,以使您的意圖清晰。沿着這些線:
func allItemsEqual<T>(items:[T]) -> Bool {
guard items.count > 1 else { fatalError("Must have at least two objects to check for equality") }
return Set(items).count == 1
}
func allItemsEqual(items:T...) -> Bool {
return equal(items)
}
if allItemsEqual(2,3,2) {
// false
}
if allItemsEqual(2, 2, 2) {
// true
}
除此之外,也許你可以看到運算符重載嗎?
試試這個:
func areEqual<T: NumericType>(numbers: T...) -> Bool {
let num = numbers[0]
for number in numbers {
if number != num {
return false
}
}
return true
}
凡NumericType
在這個職位的定義:What protocol should be adopted by a Type for a generic function to take any number type as an argument in Swift?
這將允許您使用功能適用於所有數字類型
你只是通過任意數量的數像:
//returns true
if areEqual(1, 1, 1) {
print("equal")
}
我恐怕可以問一個已經,雖然我找不到一個笨蛋。 – nicael
請注意,較少的代碼並不一定意味着更快的執行。最後,如果你需要執行很多操作,並且你需要真正的速度,你應該考慮Swift中的[simd](http://www.russbishop.net/swift-2-simd)指令。 –