я могу сделать хеш has_key? ('видео' или 'video2') (рубин)

или еще лучше могу я делать hash.has_key?('videox') где x

  • ''ничто или
  • цифра?

таким образом 'видео', 'video1', 'video2' передал бы условие?

конечно, у меня может быть два условия, но в случае, если я должен использовать video3 в будущих вещах, стал бы более сложным...

7
задан Radek 18 February 2010 в 06:28
поделиться

2 ответа

Если вам нужен общий случай 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$") }
12
ответ дан 6 December 2019 в 10:49
поделиться

Одна возможность:

hash.values_at(:a, :b, :c, :x).compact.length > 1
6
ответ дан 6 December 2019 в 10:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: