【发布时间】:2017-02-16 23:33:22
【问题描述】:
我有一个哈希,其键是日期时间,其值是哈希,如下所示:
{datetime =>{"string0"=>int0, "string1"=>int1}}
父哈希中的每个值都具有相同的格式 - 相同的 2 个字符串作为键,以整数作为值。如何在整个哈希中找到最大的int0?
【问题讨论】:
我有一个哈希,其键是日期时间,其值是哈希,如下所示:
{datetime =>{"string0"=>int0, "string1"=>int1}}
父哈希中的每个值都具有相同的格式 - 相同的 2 个字符串作为键,以整数作为值。如何在整个哈希中找到最大的int0?
【问题讨论】:
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
【讨论】:
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
【讨论】:
h.values.flat_map(&:values).max 有点短。是的,它并没有真正返回 OP 想要的东西,但绝对值得展示它!
flatten 时,灯泡就会亮起:“我可以使用flat_map 吗?”。
flatten 时立即拥有的东西:)