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

Était-ce utile?

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

mise à jour

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
scroll top