2017-02-15 29 views
0

值的项目数我有一个数组,像这样:获得具有在Ruby中

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

而且我想要得到的search_result S其中isActive是真实的计数。在这种情况下,该阵列只包含一个项目,其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中显示的search_results如何看起来就像在这里显示的代码。如果它不是一个散列并且语法工作...它是什么? – Cameron

+1

'search_results.first.class'应该揭示它的实际类。 – Stefan

回答

1

您可以使用[]访问哈希键值对,而不是.

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

如果您使用较新的Ruby版本,你可以利用Hash#dig(红宝石2.3+)和Enumerable#sum(红宝石2.4及以上)的:

search_results.sum { |hash| hash.dig(:policy, :isActive) }