sirven simbolos significa rails que para los example elementos array agregar ruby arrays hash

significa - para que sirven los simbolos en ruby



Convertir una matriz de claves y una matriz de valores en un hash en Ruby (5)

Tengo dos matrices como esta:

keys = [''a'', ''b'', ''c''] values = [1, 2, 3]

¿Hay una forma sencilla en Ruby para convertir esos arreglos en el siguiente hash?

{ ''a'' => 1, ''b'' => 2, ''c'' => 3 }

Esta es mi forma de hacerlo, pero creo que debería haber un método incorporado para hacer esto fácilmente.

def arrays2hash(keys, values) hash = {} 0.upto(keys.length - 1) do |i| hash[keys[i]] = values[i] end hash end



Lo mismo se puede hacer usando Array#transpose método de Array#transpose . Si está utilizando la versión Ruby> = 2.1 , puede aprovechar el método Array#to_h , de lo contrario, use a su viejo amigo, Hash::[]

keys = [''a'', ''b'', ''c''] values = [1, 2, 3] [keys, values].transpose.to_h # => {"a"=>1, "b"=>2, "c"=>3} Hash[[keys, values].transpose] # => {"a"=>1, "b"=>2, "c"=>3}


Los siguientes trabajos en 1.8.7:

keys = ["a", "b", "c"] values = [1, 2, 3] zipped = keys.zip(values) => [["a", 1], ["b", 2], ["c", 3]] Hash[zipped] => {"a"=>1, "b"=>2, "c"=>3}

Esto parece no funcionar en versiones anteriores de Ruby (1.8.6). Lo siguiente debe ser compatible con versiones anteriores:

Hash[*keys.zip(values).flatten]


Otra forma es usar each_with_index:

hash = {} keys.each_with_index { |key, index| hash[key] = values[index] } hash # => {"a"=>1, "b"=>2, "c"=>3}


Prueba esto, de esta manera la última d sobrescribirá la anterior c

irb(main):001:0> hash = Hash[[[1,2,3,3], [''a'',''b'',''c'',''d'']].transpose] => {1=>"a", 2=>"b", 3=>"d"} irb(main):002:0>