Ruby on rails 如果您有散列,如何删除第一个散列的值-Ruby
最简单的方法是什么:Ruby on rails 如果您有散列,如何删除第一个散列的值-Ruby,ruby-on-rails,ruby,hash,ruby-on-rails-4,ruby-2.0,Ruby On Rails,Ruby,Hash,Ruby On Rails 4,Ruby 2.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}} 我已经在控制台里挣扎了两个小时了 如果有任何答案
{"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}}
我已经在控制台里挣扎了两个小时了
如果有任何答案,我们将不胜感激
p、 马是一个变量,比如:法国塔利昂、比利时塔利昂、利皮坎内克……这样做吧
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
我愿意
更新
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}}
这个怎么样
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
该方法对于构造哈希非常方便:
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}}
一个函数式的风格的解决方案(无需修改原始散列或使用额外的变量-对我来说这是一个优雅的解决方案)
一种方法是使用使用块的形式来确定合并的两个哈希中存在的键的值:
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 } }
马是一个变量。我更新了我的问题。谢谢你的回答。马是一个变量。我更新了我的问题。谢谢你的回答!我决不会声称我提出的答案是“优雅的”。当然,优雅就像美丽一样,在旁观者的眼里。@CarySwoveland我在某种程度上同意。。。这可能是一个漫长的讨论,所以我重新措辞了我的句子。
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}}
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 } }