【问题标题】:getting the largest value from a hash that is the value of another hash?从另一个哈希值的哈希中获取最大值?
【发布时间】:2017-02-16 23:33:22
【问题描述】:

我有一个哈希,其键是日期时间,其值是哈希,如下所示:

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

父哈希中的每个值都具有相同的格式 - 相同的 2 个字符串作为键,以整数作为值。如何在整个哈希中找到最大的int0

【问题讨论】:

    标签: ruby hashtable


    【解决方案1】:
    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
    

    【讨论】:

    • 谢谢,虽然这会返回完整记录,但我实际上只是在寻找值,而不是整个记录。
    • 谢谢!过了规定的时间就会接受。
    • 安德烈你是一台机器。我还在 irb 中试用,你已经回答了:D
    • @Ursus 这是我通常对ndnspickermann 之类的人在打开问题并尝试回答时的想法:D 当我从 irb 回来时,答案已经很少了
    • 每个人都是别人的偶像:P
    【解决方案2】:
    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 想要的东西,但绝对值得展示它!
    • 谢谢,@Andrey。我年纪大了,有点老了。每当看到flatten 时,灯泡就会亮起:“我可以使用flat_map 吗?”。
    • 是的,“灯泡”正是我看到flatten 时立即拥有的东西:)
    猜你喜欢
    • 1970-01-01
    • 2020-02-20
    • 2013-07-21
    • 1970-01-01
    • 2016-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多