La permutation des clés et des valeurs dans une table de hachage
En Ruby, comment puis-je échanger des clés et des valeurs dans une table de Hachage?
Disons que j'ai la suite de Hachage:
{:a=>:one, :b=>:two, :c=>:three}
Que je veux transformer en:
{:one=>:a, :two=>:b, :three=>:c}
À l'aide d'une carte semble plutôt fastidieux. Est-il une solution plus courte?
Vous devez vous connecter pour publier un commentaire.
Ruby a une aide de la méthode de hachage qui permet de traiter un hachage comme si elle a été inversé.
Si vous voulez garder l'inversion de hachage, puis Dièse#inverser devrait fonctionner pour la plupart des situations.
MAIS...
Si vous avez des doublons,
invert
va jeter tous, mais le dernier de vos valeurs. De mêmekey
ne reviendra que le premier match.Si.. si vos valeurs sont uniques que vous pouvez utiliser
Hash#invert
si non, alors vous pouvez conserver toutes les valeurs dans un tableau, comme ceci:Remarque: Ce code avec des tests est maintenant ici.
Ou en court...
each_with_object
a plus de sens ici queinject
.each_with_object({}){ |i,o|k,v = *i; o[v] ||=[]; o[v] << k}
nice ...Vous parie qu'il y en est un! Il y a toujours une façon plus simple de faire les choses en Ruby!
C'est assez simple, il suffit d'utiliser
Hash#inverser
:Et voilà!
Cela va gérer le double des valeurs trop.
Hash#inverse
vous donne:alors que le haut-
invert
méthode est juste cassé:À L'Aide Du Tableau
À L'Aide De Hachage
Si vous avez une table de hachage où sont les clés sont uniques, vous pouvez utiliser Dièse#inverser:
Qui ne fonctionnera pas si vous ne disposez pas des clés uniques, cependant, où seule la dernière clés vus, seront conservés:
Si vous avez une table de hachage avec les touches uniques, que vous pourriez faire:
Si les valeurs de hachage sont déjà des tableaux, vous pouvez le faire: