2016-06-18 97 views
6

有沒有人知道測試三個數字是否相同的捷徑?我知道這個作品:比較三個值是否相等

if number1 == number2 && number2 == number3 { 

} 

但我想要更乾淨的東西,如;

if number1 == number2 == number3 { 

} 

這是非常重要的,因爲我比較了很多不同的值。

+1

我恐怕可以問一個已經,雖然我找不到一個笨蛋。 – nicael

+1

請注意,較少的代碼並不一定意味着更快的執行。最後,如果你需要執行很多操作,並且你需要真正的速度,你應該考慮Swift中的[simd](http://www.russbishop.net/swift-2-simd)指令。 –

回答

8

您可以使用元組的權力和平等的傳遞性質。

if (number1, number2) == (number2, number3) { 

} 

這個IF的條款,只有當number1是等於number2number2是等於number3是真實的。這意味着3個值必須相等。

3

您可以在陣列和使用集添加它們:

var someSet = NSSet(array: [2,2,2]) 

if someSet.count == 1 { 
    print("Same values") 
} 
7

你可以使用一組

if Set([number1, number2, number3]).count == 1 { 
    ... 

但我要說它並不像多爲透明,如果條款

+0

該帖子提到「我正在比較很多不同的值」,所以這是比使用元組更可持續的方法。 –

3

不知道其他任何東西,我建議將它包裝在一個函數中,以使您的意圖清晰。沿着這些線:

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 
} 

除此之外,也許你可以看到運算符重載嗎?

1

試試這個:

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") 
} 
相關問題