J'ai un hasch qui est de la forme
Comment puis-je le convertir en forme {: a => {"" aa "=> 11," ab "=> 12},: b => {" ba "=> 21," bb "=> 22}} code> p>
{: a => [[["AA", 11], ["AB", 12]] ,: B => [["Ba", 21], ["BB", 22]]} code> p>
3 Réponses :
Si vous souhaitez modifier le hachage d'origine, vous pouvez faire:
hash.each_pair { |key, value| hash[key] = value.to_a }
Merci @mikej. Travaillé comme un charme, bien que j'aimerais savoir quelle est la différence entre hash.ach et hachage_pair_pair?
Si vous ne voulez pas modifier le hachage d'origine, vous pouvez utiliser ceci: new_hash = hashject ({}) {| h, (clé, valeur) | h [clé] = valeur.to_a; h} code>
@Aditya: Si vous souhaitez que votre bloc obtient deux paramètres, utilisez chaque_pair code>. Si seulement pour la lisibilité.
hash.collect {|a, b| [a, hash[a].collect {|c,d| [c,d]}] }.collect {|e,f| [e => f]}
Voici une autre façon de faire ceci:
hsh = {:a => {"aa" => 11,"ab" => 12}, :b => {"ba" => 21,"bb" => 22}}
hsh.each{|k,v| hsh[k]=*v}
# => {:a=>[["aa", 11], ["ab", 12]], :b=>[["ba", 21], ["bb", 22]]}
Si vous travaillez avec des hachages à plusieurs niveaux et que vous souhaitez les aplatir, consultez mon gemme Hashmodel: Rubygems.org/ gemmes / hashmodel et vous pouvez obtenir la source sur github: Github.com/mikbe/hashmodel