2016-06-18 17 views
6

誰かが3つの数字が同じかどうかをテストするショートカットを知っていますか?私はこの作品を知っています:3つの値を等価で比較する

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

} 

しかし、私は何かのようなクリーナーをしたいと思います。

if number1 == number2 == number3 { 

} 

私は多くの異なる値を比較しているので非常に重要です。

+1

私は恐れがあります私は嘘つきを見つけることができませんが、私は嘘です。 – nicael

+1

コードが少なくても必ずしも実行の高速化を意味するわけではありません。最後に、多くの操作を実行する必要があり、実際の速度が必要な場合は、[simd](http://www.russbishop.net/swift-2-simd)の指示をSwiftで利用できると考えてください。 –

答えて

8

タプルの力と等価の推移プロパティを使用できます。 number1がある場合にのみ

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

} 

このIFの句が真である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

Set以外のことは分かりませんが、あなたの意図を明確にするために関数にラップすることをおすすめします。これらの線に沿ったもの:

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

これを試してみてください:

NumericTypeは、この記事で定義されている
func areEqual<T: NumericType>(numbers: T...) -> Bool { 
    let num = numbers[0] 
    for number in numbers { 
     if number != num { 
      return false 
     } 
    } 
    return true 
} 

What protocol should be adopted by a Type for a generic function to take any number type as an argument in Swift?

これは、すべての数値型

のための機能を使用できるようになりますあなただけの数の任意の数を渡しますlike:

//returns true 
if areEqual(1, 1, 1) { 
    print("equal") 
} 
関連する問題