2011-01-28 27 views
16

nuevo al rubí y yo estoy tratando de crear una matriz de valores hash (o tengo al revés?)COMO de crear una matriz de valores hash en Ruby

def collection 
    hash = { "firstname" => "Mark", "lastname" => "Martin", "age" => "24", "gender" => "M" } 
    array = [] 
    array.push(hash) 
    @collection = array[0][:firstname] 
end 

@collection no muestra el primer nombre para el objeto en la posición 0 ... ¿Qué estoy haciendo mal?

¡Gracias de antemano!

+1

"clave" =: tecla [2 más] –

Respuesta

40

Usted está utilizando un Symbol como el índice en el objeto que utiliza HashString objetos como llaves, por lo que simplemente hacer esto:

@collection = array[0]["firstname"] 

les animo a utilizar Symbol s como Hash claves en lugar de String s porque Symbol s se almacenan en caché, y por lo tanto más eficiente, por lo que esta sería una solución mejor:

def collection 
    hash = { :firstname => "Mark", :lastname => "Martin", :age => 24, :gender => "M" } 
    array = [] 
    array.push(hash) 
    @collection = array[0][:firstname] 
end 
+0

Lo sentimos .. No entiendo .. así que lo que debería ser @collection? – thedeepfield

+0

@odpogn Ver respuesta actualizada. –

+0

OHHH (palmadas en la frente), gracias! – thedeepfield

2

ha definido las claves de su hash como String. Pero luego está tratando de referenciarlo como Symbol. Eso no funcionará de esa manera.

Trate

@collection = array[0]["firstname"] 
+0

ohh ok, jaja gracias ~ – thedeepfield

1

usted puede hacer esto:

@collection = [{ "firstname" => "Mark", "lastname" => "Martin", "age" => "24", "gender" => "M" }] 
Cuestiones relacionadas