2011-01-20 14 views
15

Me preguntaba si había una mejor manera de probar si un hash tiene alguna clave de un arreglo. Quiero usar algo como esto:Probando si un hash tiene alguna de las claves

keys = %w[k1 k2 k5 k6] 
none = true if hash.key?(keys) 

¿O voy a tener que repetir esto?

+0

No veo, por qué esta pregunta debería tener la etiqueta 'rails'. – Nakilon

+8

No veo por qué tienes que ser la policía divertida. –

+0

¿qué quieres decir? – Nakilon

Respuesta

52

No hay necesidad de bucle:

(hash.keys & keys).any? # => true 

Explicación:

.keys devuelve todas las claves en un hash como una matriz. & intersecta dos matrices, devolviendo cualquier objeto que exista en ambas matrices. Finalmente, .any? verifica si la matriz intersecta tiene algún valor.

+0

+1 ¡Swelligant! :-) –

+2

Bueno ... sin bucles, pero detrás de las escenas exageradas para probar. Sigue siendo una respuesta elegante, pero no necesariamente la más absoluta. – Phrogz

+0

Bam! gracias amigo –

6
keys.any? { |i| hash.has_key? i } 
Cuestiones relacionadas