2014-02-26 109 views
0

什么是最简单的方法:如果你有哈希散列如何删除第一哈希值 - 红宝石

{"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个小时。

将不胜感激任何答案!

p.s.马就像是一个变量:FrenchStalion,BelgianStalion,Lipicanec ...

回答

1

一个功能风格溶液(而不修改原始散列或使用额外的变量 - 一个解决方案,看起来优雅对我来说)

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}} 
+0

我永远不会要求我提出的答案是“优雅”。当然,优雅,像美丽,是在旁观者的眼中。 –

+0

@CarySwoveland我同意一个观点......这可能是一个长时间的讨论,所以我已经改写了我的句子。 –

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 
+0

马是变量。我更新了我的问题。并感谢您的回答! – necker

1

我做

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}} 
+0

马是一个变量。我更新了我的问题。并感谢您的回答。 – necker

2

如何对这个。

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 
1

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}} 
1

一种方法是使用Hash#merge的形式,该形式使用块来确定th存在于两个哈希中的密钥的e值被合并:

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 } }