Si vous avez un hachage de hachages, comment supprimer les valeurs du premier hachage - Ruby
-
21-12-2019 - |
Question
Quelle est la manière la plus simple de :
{"Wednesday"=>{"Horse"=>{"9.0"=>1, "10.0"=>1}},
"Thursday"=>{"Horse"=>{"9.0"=>1, "10.0"=>1}}}
pour ça?
{"Wednesday"=>{"9.0"=>1, "10.0"=>1},
"Thursday"=>{"9.0"=>1, "10.0"=>1}}
Cela fait maintenant 2 heures que j'ai du mal avec ma console.
J'apprécierais toutes les réponses!
p.s.le Cheval est une variable comme :Étalon français, Étalon belge, Lipicanec...
La solution
une solution de style fonctionnelle (sans modifier le hachage d'origine ou en utilisant des variables supplémentaires - une solution qui a l'air élégant pour moi)
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}}
Autres conseils
à quoi ça dirait ça.
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
faire ce
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
Le Hash[]
La méthode est pratique pour construire des hachages :
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}}
je ferais
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}}
Un moyen d'utiliser la forme de Hash # Fusionner qui utilise un bloc pour déterminer les valeurs des clés présentes dans les deux hachages fusionnées:
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 } }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow