Matriz para hash Ruby

Resuelto djhworld asked hace 14 años • 9 respuestas

Convierta esta matriz:

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

...a un hash:

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

es decir, los elementos en índices pares son claves y los impares son valores .

djhworld avatar Oct 27 '10 04:10 djhworld
Aceptado
a = ["item 1", "item 2", "item 3", "item 4"]
h = Hash[*a] # => { "item 1" => "item 2", "item 3" => "item 4" }

Eso es todo. Se *llama operador splat .

Una advertencia según @Mike Lewis (en los comentarios): "Ten mucho cuidado con esto. Ruby expande los símbolos en la pila. Si haces esto con un conjunto de datos grande, espera explotar tu pila".

Por lo tanto, para la mayoría de los casos de uso generales, este método es excelente, pero use un método diferente si desea realizar la conversión en una gran cantidad de datos. Por ejemplo, @Łukasz Niemier (también en los comentarios) ofrece este método para grandes conjuntos de datos:

h = Hash[a.each_slice(2).to_a]
Ben Lee avatar Oct 26 '2010 21:10 Ben Lee

Ruby 2.1.0 introdujo un to_hmétodo en Array que hace lo que necesita si su matriz original consta de matrices de pares clave-valor: http://www.ruby-doc.org/core-2.1.0/Array.html#method -i-to_h .

[[:foo, :bar], [1, 2]].to_h
# => {:foo => :bar, 1 => 2}
Jochem Schulenklopper avatar Jan 13 '2014 21:01 Jochem Schulenklopper