誰かが3つの数字が同じかどうかをテストするショートカットを知っていますか?私はこの作品を知っています:3つの値を等価で比較する
if number1 == number2 && number2 == number3 {
}
しかし、私は何かのようなクリーナーをしたいと思います。
if number1 == number2 == number3 {
}
私は多くの異なる値を比較しているので非常に重要です。
誰かが3つの数字が同じかどうかをテストするショートカットを知っていますか?私はこの作品を知っています:3つの値を等価で比較する
if number1 == number2 && number2 == number3 {
}
しかし、私は何かのようなクリーナーをしたいと思います。
if number1 == number2 == number3 {
}
私は多くの異なる値を比較しているので非常に重要です。
タプルの力と等価の推移プロパティを使用できます。 number1
がある場合にのみ
if (number1, number2) == (number2, number3) {
}
このIFの句が真である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 {
...
を使用することができます
投稿は「私は多くの異なる価値を比較している」と述べているので、これはタプルを使うよりも持続可能なアプローチです。 –
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
}
それ以外では、演算子のオーバーロードに夢中になるかもしれませんか?
これを試してみてください:
NumericType
は、この記事で定義されている
func areEqual<T: NumericType>(numbers: T...) -> Bool {
let num = numbers[0]
for number in numbers {
if number != num {
return false
}
}
return true
}
これは、すべての数値型
のための機能を使用できるようになりますあなただけの数の任意の数を渡しますlike:
//returns true
if areEqual(1, 1, 1) {
print("equal")
}
私は恐れがあります私は嘘つきを見つけることができませんが、私は嘘です。 – nicael
コードが少なくても必ずしも実行の高速化を意味するわけではありません。最後に、多くの操作を実行する必要があり、実際の速度が必要な場合は、[simd](http://www.russbishop.net/swift-2-simd)の指示をSwiftで利用できると考えてください。 –