Matriz para hash Ruby
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 .
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]
Ruby 2.1.0 introdujo un to_h
mé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}