2017-08-07 57 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