给出一个json数组:
[{ "x":"5", "y":"20" },{ "x":"6", "y":"10" },{ "x":"50", "y":"5" }]
我想找argmax(x)
,这样我就可以puts argmax(arr, :arg => "x").y
获得5
。我怎样才能在Ruby中优雅地实现它?
修改:澄清了一下。我们的想法是,您可以在列表中指定要最大化的元素的字段,并且该方法将返回最大化元素。
答案 0 :(得分:4)
我想你想要Enumerable#max_by
。要像你说的那样得到y
,那就是:
arr.max_by {|hash| hash['x']}['y']
(嗯,实际上,你会希望数字是数字而不是字符串,因为'50'的排序低于'6'。但我认为你明白了。你可以to_i
或做任何事情在块中处理您需要的“真实”值以进行排序。)