2017-02-15 2 views
0

У меня есть массив следующим образом:Получить количество элементов, имеющих значение в Рубине

search_results = [{policy: {isActive: true}}] 

И я хочу, чтобы получить отсчет search_result с, где isActive правда. В этом случае массив содержит только 1 элемент, policyisActive объект true.

Я попытался с:

search_results.group_by { |x| x.policy.isActive }.count 

Однако я всегда получаю 1 обратно. Независимо от того, является ли значение isActive истинным или ложным.

+1

_ "Я всегда получаю 1 обратно" _ - Это необычно, он должен поднять 'NoMethodError', потому что' Hash' не отвечает на 'policy'. – Stefan

+0

@Stefan 'search_results.count {| sr | sr.policy.isActive} 'работал для меня. Я использую RubyMine, а также новичок в Ruby, поэтому я понял, как результаты поиска в Evaluate Expression будут выглядеть как код для показа здесь. Если это не хэш, и этот синтаксис работал ... что это? – Cameron

+1

'search_results.first.class' должен показать свой фактический класс. – Stefan

ответ

1

Вы получаете ключ-значение хэша с [], а не ..

search_results.count { |hash| hash[:policy][:isActive] } 

Если вы используете более новую версию Ruby, вы можете использовать Hash#dig (Ruby 2.3+) и Enumerable#sum (Ruby 2.4+):

search_results.sum { |hash| hash.dig(:policy, :isActive) } 
Смежные вопросы