49 votes

Comment changer toutes les clés d'un hachage par un nouvel ensemble de clés données ?

Comment remplacer toutes les clés d'un hachage par un nouvel ensemble de clés données ?

Existe-t-il un moyen de le faire de manière élégante ?

0voto

barbolo Points 682

Si vous vous préoccupez également des performances, il est plus rapide :

hsh.keys.each { |k| hsh[ key_map[k] ] = hsh.delete(k) if key_map[k] }

Vous ne créez pas de nouveau Hash et vous ne renommez que les clés nécessaires. Cela permet d'obtenir de meilleures performances.

Vous trouverez plus de détails dans " Comment renommer élégamment toutes les clés d'un hash en Ruby ? "

0voto

Cary Swoveland Points 6784
h = { 'foo'=>1, 'bar'=>2 }
key_map = { 'foo'=>'foozle', 'bar'=>'barzle' }

h.each_with_object({}) { |(k,v),g| g[key_map[k]]=v }
  #=> {"foozle"=>1, "barzle"=>2}

ou

h.reduce({}) { |g,(k,v)| g.merge(key_map[k]=>v) }
  #=> {"foozle"=>1, "barzle"=>2}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X