2017-03-11 5 views
-4

私は、最終計算があらかじめ定義された配列の最も近い数字に丸められる必要がある迅速なブロックを持っていますか?あなたはどうしますか?どのように素早く配列の最も近い番号に変数を丸めますか?

var array = [8, 23, 31, 46, 54, 69, 77, 92, 100, 115, 123, 138] 
var finalCalculation = 55.5 
//round 55.5 to the nearest number in array which is 54 
+3

あなたは間違った質問をしています。あなたは何も丸めようとしていません。 'finalCalculation'番号に最も近い数値を配列内で見つけようとしています。 – rmaddy

+2

あなたが試したことを示す質問を[編集]してください。私たちはここであなたの宿題をしていません。 – rmaddy

+0

私はあなたのために完全な答えを作ったが、@rmaddyは正しい。あなたが試したこと、うまくいかなかったことを私たちに示す必要がある。 – Grimxn

答えて

0

私はをループまでいたと思い、もう1つは、最も近いあったのを追跡し、配列内の次の項目にそれを比較することができる唯一の方法は、しかし、私はここで、これは大幅に改善することができ確信しています:

var array: Array<Double> = [8, 23, 31, 46, 54, 69, 77, 92, 100, 115, 123, 138] 
var finalCalculation: Double = 55.5 

var closest: Double = array[0] 

for item in array { 
    if abs(finalCalculation - item) < abs(finalCalculation - closest) { 
     closest = item 
    } 
} 

print(closest) 

ABS部分は、あなたが数字の間の距離を取得していることを確認することです。

0
var result = array.reduce(100, { x, y in 
    abs(Double(x) - finalCalculation) > abs(Double(y) - finalCalculation) ? y : x 
}) 

'100'は、任意の数で、削減計算を開始します。 finalCalculationとあなたの答えの差よりも大きい限り、好きなものを使うことができます。

+0

reduceの初期値として任意の配列要素(たとえば最初の配列要素)を選択できます。 - 同じことは 'min(by:...) 'を使って表すことができます。 –

+0

最初の要素については正しくありますが、そのように値が表示されません。再び、最初の数字は任意です。 min(by :)は良い点です。私はSwift 3のアップデートからreduce()を使用していなかったので、これを追いつくための言い訳として使用しました。 :P – dylanthelion

+0

配列要素で始まる利点は、十分に大きな初期値を*推測する必要がないことです。 –

関連する問題