Pregunta

¿Cuál es la forma más sencilla de:

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

¿A esto?

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

He estado luchando en mi consola durante 2 horas ahora.

¡Agradecería alguna respuesta!

P.s.El caballo es una variable como: FrenchStalion, Belgianstalion, Lipicanec ...

¿Fue útil?

Solución

Una solución de estilo funcional (sin modificar el hash original o usar variables adicionales: una solución que se ve elegante para mí)

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

Otros consejos

¿Qué tal esto?

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

hacer esto

  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

The Hash[] El método es útil para construir los hashes:

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

Yo haría

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

actualización

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

Una forma es usar la forma de >Hash # Merge que emplea un bloque para determinar los valores de las teclas que están presentes en ambos hashes que se fusionan:

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top