48012


[近似値の求め方について](https://ja.stackoverflow.com/questions/47974/%E8%BF%91%E4%BC%BC%E5%80%A4%E3%81%AE%E6%B1%82%E3%82%81%E6%96%B9%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6%E3%81%A7%E8%B3%AA%E5%95%8F%E3%81%97)、回答して頂いたのですが回答のラムダ関数について質問です。

[code]

    a=2.49
    b=1.50
    c=2.21
    d=1.94
    e=2.38
    
    stan=2.00
    
    l = [a, b, c, d, e]
    l.sort_by(&lambda{|e| (e-stan).abs})[0] # => 1.94
    
[/code]

これがハッシュの場合はどうなるのでしょうか。  
例えば`l = { "m"=>a, "n"=>b, "o"=>c, "p"=>d, "q"=>e
}`の場合に、ラムダ関数をしようして、stan(2.00)に最も近いものを取得し、ハッシュ左の"m"や"n"を出力するにはどのように書くのでしょうか。


CC BY-SA 4.0
2018-09-01T01:23:39.333
47999
2018-09-01T14:20:38.363
2018-09-01T14:01:11.557
19110
29428
question
ruby
ハッシュに対するlambda関数について


`Hash#sort_by` は内部的に `Hash#each` を呼び出してます。  
`Hash#each` はブロック引数がキーと値の二つになります。

<https://docs.ruby-lang.org/ja/2.5.0/method/Hash/i/each.html>

実際には要素が2つの配列が渡されます。  
今回の場合は、次のように第2引数だけ使えばいいです。

[code]

    l.sort_by(&lambda{|e| (e[1]-stan).abs})[0] # => ["p", 1.94]
    
[/code]


CC BY-SA 4.0
2018-09-01T14:20:38.363
48012
2018-09-01T14:20:38.363
3249
47999
answer