0

次のようなハッシュの配列があります。

objects = [ {:area => -30}, {:area => 20}, {:area => 30}]

面積が小さいハッシュを取得するにはどうすればよいですか?しかし、それは常に 0 より大きいですか?

私はこれを試しました:

objects.min_by { |el| (el[:area] if el[:area] > 0) }

しかし、(if...) は NIL を返すため、他の値と比較できないと思います。どうやってやるの?

4

4 に答える 4

0

私はおそらくこれを行うだろう:

objects.reject{|x| x[:area] <= 0}.min_by{|x| x[:area]}
于 2013-11-08T19:25:51.697 に答える
0

#inject一種の「マップと削減」機能を提供することを使用します。

objects = [ {:area => -30}, {:area => 20}, {:area => 30}]
objects.inject(nil) { |result, item| item[:area] > 0 && (result.nil? || item[:area] < result) ? item[:area] : result }
# => 20

最初の値 (または大きな値) として nil の代わりに値を設定し、nil をスキップすることで単純化できます。

objects = [ {:area => -30}, {:area => 20}, {:area => 30}]
objects.inject(objects[0][:area]) { |result, item| item[:area] > 0 && item[:area] < result ? item[:area] : result }
# => 20
于 2013-11-08T19:28:12.383 に答える