2011-07-08 27 views
5

tengo un hashuso de hash seleccionar para una matriz

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

y una serie

a = [a, b] 

¿Es posible utilizar

h.select {|k,v| k == array_here?} 

Para seleccionar todos los elementos de la matriz que se existe en el hash?

he encontrado la solución

h.select {|k,v| a.include?(k) } 
+0

Debe agregar su solución como respuesta y aceptarla –

+0

Está pidiendo _ "todos los elementos del conjunto que existe en el hash" _, pero en cambio que quiere _ "todos los elementos del hash cuyas claves existen en el conjunto" _ . La pregunta fue engañosa y resultó con respuestas incorrectas. –

+0

Creo que es lo mismo. ¡todos los elementos de la matriz que existe en el hash tienen el mismo significado que todos los elementos del hash cuyas claves existen en la matriz! – glarkou

Respuesta

0

Una posible y la respuesta más sencilla es:

h.select {|k,v| a.include?(k) } 
2

Vas acerca al revés. Prueba esto:

a.select {|e| h.has_key? e } 
+0

Esto no está funcionando. Lo correcto es 'h.select {| k, v | a.include? (k)} ' – glarkou

+2

En ese caso, usted hizo la pregunta incorrecta. – jtbandes

1

que podría lograr que con algo como:

a.each do |arr_elem| 
    new_hash[arr_elem] = h[arr_elem] unless h[arr_elem].nil? 
end 
1

Si realmente quiere lo que ha pedido (es decir, elementos de una matriz que se presentan como claves en un hash):

h = {:a => 1, :b => 2, :c => 3} 
a = [:a, :b, :d] 
a & h.keys 
Cuestiones relacionadas