【问题标题】:If you have hash of hashes how to remove the values of first hash - Ruby如果你有哈希值如何删除第一个哈希值 - Ruby
【发布时间】:2023-03-17 17:01:01
【问题描述】:

什么是最简单的方法:

{"Wednesday"=>{"Horse"=>{"9.0"=>1, "10.0"=>1}}, 
"Thursday"=>{"Horse"=>{"9.0"=>1, "10.0"=>1}}}

这个?

{"Wednesday"=>{"9.0"=>1, "10.0"=>1}, 
"Thursday"=>{"9.0"=>1, "10.0"=>1}}

我已经在控制台中苦苦挣扎了 2 个小时。

不胜感激!

附言Horse 是一个变量,例如:FrenchStalion、BelgianStalion、Lipicanec ...

【问题讨论】:

    标签: ruby-on-rails ruby hash ruby-on-rails-4 ruby-2.0


    【解决方案1】:

    这样做

      a = {"Wednesday"=>{"Horse"=>{"9.0"=>1, "10.0"=>1}}, 
           "Thursday"=>{"Horse"=>{"9.0"=>1, "10.0"=>1}}}
      d = {} 
      a.each { |k,v| d[k] = v["Horse"]  }
      puts d
    

    【讨论】:

    • 马是一个变量。我更新了我的问题。并感谢您的回答!
    【解决方案2】:

    我愿意

    hash = {"Wednesday"=>{"Horse"=>{"9.0"=>1, "10.0"=>1}}, 
    "Thursday"=>{"Horse"=>{"9.0"=>1, "10.0"=>1}}}
    
    hash.each_with_object({}) { |(k,v),h| h[k] = v['Horse']}
    # => {"Wednesday"=>{"9.0"=>1, "10.0"=>1}, "Thursday"=>{"9.0"=>1, "10.0"=>1}}
    

    更新

    hash.each_with_object({}) { |(k,v),h| h[k] = v.shift.last}
    # => {"Wednesday"=>{"9.0"=>1, "10.0"=>1}, "Thursday"=>{"9.0"=>1, "10.0"=>1}}
    

    【讨论】:

    • 马是一个变量。我更新了我的问题。并感谢您的回答。
    【解决方案3】:

    这个怎么样。

    hash = {"Wednesday"=>{"Horse"=>{"9.0"=>1, "10.0"=>1}}, 
    "Thursday"=>{"Horse"=>{"9.0"=>1, "10.0"=>1}}}
    a ={}
    hash.each do |k,v|
      a[k]=v.values.first
    end
    

    【讨论】:

      【解决方案4】:

      Hash[] 方法在构造散列时派上用场:

      hash = {
        "Wednesday"=>{"Horse"=>{"9.0"=>1, "10.0"=>1}},
        "Thursday"=>{"Horse"=>{"9.0"=>1, "10.0"=>1}}
      }
      
      x = "Horse"
      
      Hash[
        hash.collect do |k, v|
          [ k, v[x] ]
        end
      ]
      
      # => {"Wednesday"=>{"9.0"=>1, "10.0"=>1}, "Thursday"=>{"9.0"=>1, "10.0"=>1}}
      

      【讨论】:

        【解决方案5】:

        功能风格的解决方案(不修改原始哈希或使用额外的变量 - 对我来说看起来很优雅的解决方案)

        hash.reduce({}) { |acc, (k, v)| acc.merge(Hash[k, *v.values]) }
        # => {"Wednesday"=>{"9.0"=>1, "10.0"=>1}, "Thursday"=>{"9.0"=>1, "10.0"=>1}}
        

        【讨论】:

        • 我永远不会声称我提出的答案是“优雅”。当然,优雅,就像美丽一样,在旁观者的眼中。
        • @CarySwoveland 我在一定程度上同意......这可能是一个很长的讨论,所以我改写了我的句子。
        【解决方案6】:

        一种方法是使用Hash#merge 的形式,它使用一个块来确定在被合并的两个散列中存在的键的值:

        h = { "Wednesday"=>{ "Horse"=>{ "9.0"=>1, "10.0"=>1 } }, 
              "Thursday" =>{ "Horse"=>{ "9.0"=>1, "10.0"=>1 } } }
        
        key = "Horse"
        
        h.merge(h) { |*_,g| g[key] }
          #=> { "Wednesday"=>{ "9.0"=>1, "10.0"=>1 },
          #     "Thursday" =>{ "9.0"=>1, "10.0"=>1 } }
        

        【讨论】:

          猜你喜欢
          • 2013-07-21
          • 2023-04-09
          • 2013-10-09
          • 1970-01-01
          • 2015-09-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多