я могу сделать hash.has_key? ('video' или 'video2') (ruby) - PullRequest
7 голосов
/ 18 февраля 2010

или даже лучше, я могу сделать hash.has_key?('videox'), где х

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

чтобы 'video', 'video1', 'video2' проходили условие?

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

Ответы [ 2 ]

12 голосов
/ 18 февраля 2010

Если вам нужен общий случай видео , за которым следует цифра без явного перечисления всех комбинаций, есть пара методов из 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$") }
6 голосов
/ 18 февраля 2010

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

hash.values_at(:a, :b, :c, :x).compact.length > 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...