Tableau de hachages de hachage
Par exemple, j'ai tableau de simple hachages
a = [{a: :b}, {c: :d}]
Ce qui est le meilleur moyen de convertir il dans tout cela?
{a: :b, c: :d}
Vous devez vous connecter pour publier un commentaire.
Par exemple, j'ai tableau de simple hachages
a = [{a: :b}, {c: :d}]
Ce qui est le meilleur moyen de convertir il dans tout cela?
{a: :b, c: :d}
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser
directement les rendements
Noter que dans le cas de collisions de l'ordre est important. Dernier hachages de remplacer précédente mappages, voir par exemple:
Hash.new
, ou comme des amis aime à l'appeler,{}
🙂 Tellement que j'aime pure solution fonctionnelle, notez quemerge
va créer une nouvelle table de hachage sur chaque itération; on peut utiliserupdate
à la place (il ne plaisante pas avec l'entrée de tables de hachage, c'est le point le plus important):hs.reduce({}, :update)
:update
version proposée par tokland est l'option plus rapide.Vous pouvez utiliser
.inject
:Démonstration
Qui initie une nouvelle table de hachage sur chaque itération à partir de les deux ont fusionné. Pour éviter cela, vous pouvez utiliser le destructeur
:merge!
( ou:update
, qui est la même):Démonstration
Ces deux:
Noter que
Hash#merge
crée une nouvelle table de hachage sur chaque itération, ce qui peut être un problème si vous êtes à la construction d'un gros hachage. Dans ce cas, utilisezupdate
à la place:Une approche alternative serait de convertir les valeurs de hachage pour les paires et ensuite construire la finale de hachage:
Je suis tombé sur cette réponse et je voulais comparer les deux options en termes de performances pour voir qui est le meilleur:
a.reduce Hash.new, :merge
a.inject(:merge)
à l'aide de ruby le test d'un module, il s'avère que l'option (2)
a.inject(:merge)
est plus rapide.code utilisé pour la comparaison:
les résultats ont été
reduce
etinject
sont des alias. Une vérification rapide w/ votre test montre que le ralentissement est dû àHash.new
que l'initialiseur.:merge
crée une nouvelle table de hachage à chaque itération.:update
ne l'est pas. Donc, une ré-exécuter avec:update
montre, même avec laHash.new
, le:update
version est plus rapide:`` l'utilisateur du système total réel de réduire w/ Hachage.nouvelles & :mise à jour 0.056754 0.002097 0.058851 ( 0.059330) réduire w/ :fusionner seulement 0.090021 0.001081 0.091102 ( 0.091257)``Essayer cette
Suffit d'utiliser
Vous pouvez le transformer en tableau
[[:a, :b]]
et après que tout traduire pour de hachage{:a=>:b}