2017-08-07 6 views
0

min_byの動作を理解するのを手伝ってください。Ruby min_by logic

私は2つのカラム(raw_value、percentile)を持つ "normas"テーブルを持っています。 いくつかの計算の後、私はcalculate_resultを取得し、私の目標は、最も近いraw_valueのpercentileをcalculate_resultに見つけることです。 以下のように私のアプローチは:

この場合
arr = [1,2,3,4,5] 
arr.min_by {|x| (x - 3.5).abs} 
=> 3 

我々は二つの同一の差異(0.5〜3を持っている:

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

それは動作しますが、私はすべてのロジックを把握することはできません、ここで私が何を意味するかですと同様に4)、 私の質問は、結果を選択するためのルールは、複数の最小が見つかった場合です。

生産的な日ですか? :)

答えて

1

等しい値の場合、最初の最小値がカウントされます。

はでそれを試してみてください[5、4、3、2、1]あなたは結果がこの値と一致する最初のインデックス位置を返します#indexと一致している今、4

で表示されます。私の最高の推測だった。このように、それの

だと思う...

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

は、ありがとうございました! –

+0

背景を編集するために編集しました – SteveTurczyn

+0

'#index'のスニペットは' #min'との整合性を示していません。それは、##indexとの整合性 '#min_by'を示しています。 '#min'が最後を返したとしても、それはまだ戻っていました。 – mudasobwa