我有一個swift代碼塊,其中最後的計算需要四捨五入到預定義數組中的最近數字?你會怎麼做?如何將變量四捨五入到數組中最近的數字?
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
我有一個swift代碼塊,其中最後的計算需要四捨五入到預定義數組中的最近數字?你會怎麼做?如何將變量四捨五入到數組中最近的數字?
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
我能想出的唯一辦法是遍歷並跟蹤其中一個是最接近和比較,到下一個項目在數組中,但是,我敢肯定,這可以在這裏得到改善:
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部分是確保你得到的數字之間的距離。
var result = array.reduce(100, { x, y in
abs(Double(x) - finalCalculation) > abs(Double(y) - finalCalculation) ? y : x
})
'100'是一個任意大的數字,開始減少計算。你可以使用任何你喜歡的,只要它大於finalCalculation和你的答案之間的差異。
您可以選擇任何數組元素(例如第一個)作爲reduce中的初始值。 - 同樣可以用'min(by:...)'表示。 –
你對第一個元素是正確的,雖然我沒有看到這樣做的價值;再次,第一個數字是任意的。 min(by :)是一個好點。自從Swift 3更新以來我沒有使用reduce(),並以此作爲追趕的藉口。 :P – dylanthelion
從數組元素開始的優點是,您不必*猜測足夠大的初始值。 –
你在問錯誤的問題。你並沒有試圖繞過任何東西。您正試圖在數組中找到最接近您的'finalCalculation'數字的數字。 – rmaddy
[編輯]你的問題顯示你已經嘗試過。我們不在這裏爲你做功課。 – rmaddy
我爲你構建了一個完整的答案,但@rmaddy是正確的 - 你需要向我們展示你已經嘗試過什麼,以及什麼不起作用。 – Grimxn