2015-08-05 3 views

ответ

8

Там нет необходимости создавать временный массив:

h.count { |k,_| k.start_with?("day") } 
    #=> 7 

Я предположил, что ключ должен начинаться с "day", но в противном случае:

h.count { |k,_| k =~ /day/ } 
    #=> 7 
4

Как это:

h.keys.grep(/day/).count 

EDIT: Поскольку Cary Swoveland совершенно правильно,

h.each_key.lazy.grep(/day/).count 

TIMTOWTDI: D

0
  • Hash.keys возвращает массив ключей в hash
  • Array.select фильтрует этот массив на основе регулярных выражений /day/
  • Array.count подсчитывает количество элементов в отфильтрованной массиве:

    hash.keys.select { |key| key =~ /day/ }.count

Смежные вопросы