2017-02-15 27 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) }