или еще лучше могу я делать hash.has_key?('videox')
где x
таким образом 'видео', 'video1', 'video2' передал бы условие?
конечно, у меня может быть два условия, но в случае, если я должен использовать video3 в будущих вещах, стал бы более сложным...
Если вам нужен общий случай video с последующей цифрой без явного перечисления всех комбинаций, есть пара методов из Enumerable, которые можно использовать в сочетании с регулярным выражением.
hash.keys
представляет собой массив ключей из hash
, а ^video\d$
соответствует видео, за которым следует цифра.
# true if the block returns true for any element
hash.keys.any? { |k| k.match(/^video\d$/ }
или
# grep returns an array of the matching elements
hash.keys.grep(/^video\d$/).size > 0
grep
также позволит вам перехватить совпадающий ключ(и), если вам понадобится эта информация для следующего фрагмента кода, например
if (matched_keys = hash.keys.grep(/^video\d$/)).size > 0
puts "Matching keys #{matched_keys.inspect}"
Более того, если префикс искомого ключа находится в переменной, а не в жестко закодированной строке, мы можем сделать что-то вроде:
prefix = 'video'
# use an interpolated string, note the need to escape the
# \ in \d
hash.keys.any? { |k| k.match("^#{prefix}\\d$") }
Одна возможность:
hash.values_at(:a, :b, :c, :x).compact.length > 1