我有这个散列:
h = {
124 => ["shoes", "59.99"],
456 => ["pants", "49.50"],
352 => ["socks", "3.99"]
}
每个值都有两个元素。它们是名称(例如,"shoes"
、"pants"
、"socks"
(和价格(例如"59.99"
、"49.50"
和"3.99"
(。我需要选择价格最高的值。这将是价格为"59.99"
的关键124
。如何选择价格最高的哈希?
我试过这个:
h.select{ |x| x[1] }.max
#=> [456, ["pants", "49.50"]]
但这给了我最大值,并返回密钥456
。
最常用的可能是:
h.max_by { |_, v| v.last.to_f }
#=> [124, ["shoes", "59.99"]]
您可以使用这样的括号来挖掘结构:
h = {
124 => ["shoes", "59.99"],
456 => ["pants", "49.50"],
352 => ["socks", "3.99"]
}
h.max_by{|_, (_, price)| price.to_f}
# => [124, ["shoes", "59.99"]]
您可以首先对哈希进行排序:
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"]]
如果你不介意按键,另一个选项可能是:
h.values.map(&:reverse).max
#=> ["59.99", "shoes"]