从数组的哈希中选择属性中的最高值

时间:2018-11-20 21:49:28

标签: arrays ruby hash

我有这个哈希值:

h = {
  124 => ["shoes", "59.99"],
  456 => ["pants", "49.50"],
  352 => ["socks", "3.99"]
}

每个值都有两个元素。它们是名称(例如"shoes""pants""socks")和价格(例如"59.99""49.50""3.99") 。我需要选择价格最高的值。这将是价格为124的键"59.99"。如何选择价格最高的哈希值?

我尝试过:

h.select{ |x| x[1] }.max
#=> [456, ["pants", "49.50"]]

但这给了我最大值,并返回了键456

4 个答案:

答案 0 :(得分:6)

最惯用的可能是这样:

h.max_by { |_, v| v.last.to_f }
#=> [124, ["shoes", "59.99"]]

答案 1 :(得分:5)

您可以使用如下括号来深入了解结构:

h = {
  124 => ["shoes", "59.99"],
  456 => ["pants", "49.50"],
  352 => ["socks", "3.99"]
}

h.max_by{|_, (_, price)| price.to_f}
# => [124, ["shoes", "59.99"]]

答案 2 :(得分:3)

您可以先对哈希进行排序:

sorted = hash.sort_by { |key, value| value[1].to_f }
# => [[352, ["socks", "3.99"]], [456, ["pants", "49.50"]], [124, ["shoes", "59.99"]]]

然后您可以选择最后一对:

sorted[-1]
# => [124, ["shoes", "59.99"]]

答案 3 :(得分:1)

如果您不介意按键,则另一个选择可能是:

set /?

h.values.map(&:reverse).max