Si desea que el caso general de video seguido de un dígito sin enumerar explícitamente todas las combinaciones. Hay un par de métodos de Enumerable que puede usar en combinación con una expresión regular.
hash.keys
es una matriz de las claves de hash
y ^video\d$
coincide con el video seguido de un dígito.
# true if the block returns true for any element
hash.keys.any? { |k| k.match(/^video\d$/ }
o
# grep returns an array of the matching elements
hash.keys.grep(/^video\d$/).size > 0
grep
también permitiría capturar la tecla correspondiente (s) si necesita información para la siguiente parte de su código, por ejemplo,
if (matched_keys = hash.keys.grep(/^video\d$/)).size > 0
puts "Matching keys #{matched_keys.inspect}"
Por otra parte, si el prefijo de la clave que estamos buscando es una variable en lugar de una cadena codificado que podemos hacer algo en la línea de:
prefix = 'video'
# use an interpolated string, note the need to escape the
# \ in \d
hash.keys.any? { |k| k.match("^#{prefix}\\d$") }
hash.keys.any? (& Blk) es la solución perfecta para esto. Puede verificar casi cualquier condición en el bloque, si una cadena tiene una cierta estructura ({| k | k.match (/^video \ d $ /} ), si un objeto de una cierta clase es una clave ({| k | k.is_a? (Numérico)}), ... – severin
@mikej: me gusta la forma en que explicas todo ... ¿podrías agregar también a tu respuesta cómo se vería el código si usamos el nombre de la variable en lugar de la cadena real de "video"? Gracias – Radek
@Radek actualizó la respuesta para mostrar un caso de dónde está el prefijo en una variable. Espero que este es el tipo de cosas que tenía en mente. – mikej