Выбор наибольшего значения в атрибуте из хэша массивов - PullRequest
0 голосов
/ 21 ноября 2018

У меня есть этот хэш:

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 голосов
/ 21 ноября 2018

Вы можете копаться в структуре, используя следующие скобки:

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

h.max_by{|_, (_, price)| price.to_f}
# => [124, ["shoes", "59.99"]]
0 голосов
/ 21 ноября 2018

Если вы не возражаете против клавиш, другой вариант может быть:

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

#=> ["59.99", "shoes"]

0 голосов
/ 21 ноября 2018

Наиболее идиоматичным, вероятно, будет это:

h.max_by { |_, v| v.last.to_f }
#=> [124, ["shoes", "59.99"]]
0 голосов
/ 21 ноября 2018

Вы можете сначала отсортировать хеш:

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"]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...