10
votes

Convertir des hatus de rubis aux tableaux

J'ai un hasch qui est de la forme {: a => {"" aa "=> 11," ab "=> 12},: b => {" ba "=> 21," bb "=> 22}}

Comment puis-je le convertir en forme {: a => [[["AA", 11], ["AB", 12]] ,: B => [["Ba", 21], ["BB", 22]]}


1 commentaires

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


3 Réponses :


24
votes

Si vous souhaitez modifier le hachage d'origine, vous pouvez faire:

hash.each_pair { |key, value| hash[key] = value.to_a }


3 commentaires

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}


@Aditya: Si vous souhaitez que votre bloc obtient deux paramètres, utilisez chaque_pair . Si seulement pour la lisibilité.



0
votes
hash.collect {|a, b|  [a, hash[a].collect {|c,d| [c,d]}] }.collect {|e,f| [e => f]}

0 commentaires

4
votes

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


0 commentaires