2016-10-07 6 views
0

У меня есть хэш, ключи которого является DateTimes, и чьи значения хэш, как следующее:Получение наибольшего значения из хэша, которое является значением другого хэша?

{datetime =>{"string0"=>int0, "string1"=>int1}} 

Каждого значение в родительском хэше имеет тот же формат - та же 2 строки в качестве ключей, с Интсами как значения. Как я могу найти самый большой int0 во всем хэше?

ответ

2
hash = {:foo =>{"string0"=>1, "string1"=>2}, :bar => {"string0"=>3, "string1"=>4}} 
Hash[*hash.max_by { |_k, v| v['string0'] }] 
#=> {:bar=>{"string0"=>3, "string1"=>4}} 

Чтобы получить фактическое значение:

hash.map { |_k, v| v['string0'] }.max 
#=> 3 
+0

Спасибо, это возвращает полную запись, хотя я фактически ищу только ценность, а не всю запись. –

+0

Спасибо! Примите, как только пройдет необходимое время. –

+0

Андрей, ты машина. Я все еще в irb, чтобы попробовать, и вы уже ответили: D – Ursus

1
h = {:foo =>{"string0"=>1, "string1"=>2}, 
    :bar => {"string0"=>3, "string1"=>4, "string5"=>1} } 

h.values.flat_map { |g| g.values_at("string0") }.max 
    #=> 3 

шаги заключаются в следующем.

a = h.values 
    #=> [{"string0"=>1, "string1"=>2}, {"string0"=>3, "string1"=>4, "string5"=>1}] 
b = a.flat_map { |g| g.values_at("string0") } 
    #=> [1, 3] 
b.max 
    #=> 3 
+2

Ницца. 'h.values.flat_map (&: значения) .max' немного короче. И да, это действительно не возвращает то, что хочет OP, но определенно стоит его показать! –

+0

Спасибо, @ Andrey. В старости я становлюсь немного старческим. Всякий раз, когда вы видите «сгладить» лампочку, нужно продолжать: «Могу ли я использовать« flat_map »?». –

+0

Да, «лампочка» - это именно то, что у меня есть сразу, когда я вижу «сплющивать» :) –