2017-08-07 54 views
0

請幫我弄清楚min_by行爲。Ruby min_by邏輯

我有一個「諾馬」表有兩列(raw_value,百分點)。 經過一些計算後,我得到calculate_result,我的目標是找到最接近我的calculate_result的raw_value的百分位數。 下面我的做法:

raw = Norma.where(name: name).map(&:raw_value).min_by { |x| (x.to_f - value.to_f).abs } 

它的工作原理,但我不能想出所有的邏輯,這裏就是我的意思:

arr = [1,2,3,4,5] 
arr.min_by {|x| (x - 3.5).abs} 
=> 3 
在這種情況下

,我們有兩個相同的差異(0.5〜3以及4), 所以我的問題是什麼是規則選擇結果,如果多個最小的發現。

祝您生產愉快! :)

回答

1

如果值相等,則表示第一個最小值。

與嘗試[5,4,3,2,1],你會看到的結果是現在4.

這與#index它返回相匹配的值的第一個索引位置是一致的。

認爲它是這個...

temp_arr = arr.map{ |x| (x-3.5).abs } 
arr[temp_arr.index(temp_arr.min)] 
+0

這是我最好的猜測,謝謝! –

+0

編輯添加一些背景 – SteveTurczyn

+0

帶有#索引的代碼片段沒有說明與#min的一致性。它用'#index'說明了一致性'#min_by'。即使'#min'返回最後,它仍然返回相同。 – mudasobwa