1

如何根据散列中的值从数组中获取散列?在这种情况下,我想选择得分最低的哈希,即potato. 我使用 Ruby 1.9。

[
  { name: "tomato", score: 9 },
  { name: "potato", score: 3 },
  { name: "carrot", score: 6 }
]
4

3 回答 3

5

您可以使用 Enumerable 的min_by方法:

ary.min_by {|h| h[:score] } 
#=> { name: "potato", score: "3" }
于 2013-07-09T16:47:46.967 回答
1

Ruby'sEnumerable#min_by绝对是要走的路。但是,只是为了好玩,这里有一个基于以下的解决方案Enumerable#reduce

array.reduce({}) do |memo, x|
  min_score = memo[:score]
  (!min_score || (min_score > x[:score])) ? x : memo
end
于 2013-07-09T16:58:28.303 回答
1

我认为您的意图是按数字而不是字符串进行比较。

array.min_by{|h| h[:score].to_i}

编辑由于OP改变了问题,答案就变成了

array.min_by{|h| h[:score]}

现在这与 Zach Kemp 的回答没有区别。

于 2013-07-09T16:49:27.510 回答