212 votes

Tableau pour hacher Ruby

Bon alors voici l'affaire, j'ai cherché sur google pour les âges à trouver une solution à ce et tandis qu'il ya beaucoup là-bas, ils ne semblent pas faire le travail, je suis à la recherche pour.

Fondamentalement, j'ai un tableau structuré comme ceci

["item 1", "item 2", "item 3", "item 4"] 

Je veux convertir cette Hachage de sorte qu'il ressemble à ceci

{ "item 1" => "item 2", "item 3" => "item 4" }

c'est à dire les articles qui sont sur le 'même' index sont les clés et les éléments sur la "étrange" indices sont les valeurs.

Aucune idées de comment faire cela proprement? Je suppose que la force brutale méthode serait de simplement sortir tous le même index dans un tableau séparé et ensuite une boucle autour d'eux pour ajouter les valeurs.

372voto

Ben Lee Points 25935
a = ["item 1", "item 2", "item 3", "item 4"]
h = Hash[*a] # => { "item 1" => "item 2", "item 3" => "item 4" }

C'est tout. L' * est appelé le splat opérateur.


Une mise en garde par @Mike Lewis (dans les commentaires): "il faut Être très prudent avec cela. Ruby se développe splats sur la pile. Si vous faites cela avec un grand jeu de données, attendez-vous à sauter hors de votre pile de jetons."

Si, pour la plupart générale des cas d'utilisation de cette méthode est grand, mais l'utilisation d'une autre méthode si vous voulez faire la conversion en lots de données. Par exemple, @Łukasz Niemier (également dans les commentaires) propose cette méthode de grands ensembles de données:

h = Hash[a.each_slice(2).to_a]

134voto

jschulenklopper Points 809

Ruby 2.1.0 introduit une `` méthode sur le tableau qui fait ce que vous avez besoin si votre tableau d’origine est constitué de tableaux de paires clé-valeur : http://www.ruby-doc.org/core-2.1.0/Array.html#method-i-to_h.

31voto

Chuck Points 138930

Il suffit d’utiliser `` avec les valeurs du tableau. Par exemple :

26voto

Erik Escobedo Points 1279

Ou si vous avez un tableau de `` tableaux, vous pouvez faire :

7voto

Boris Stitnicky Points 5409
<pre><code></code><p><code></code>:</p><pre><code></code></pre><p>ou, si vous êtes un fan de paresseux de la programmation fonctionnelle cassé :</p><pre><code></code></pre></pre>

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