2014-09-24 100 views
-2
filters = { 
    "start_year" => "2009", 
    "end_year" => "2011", 
    "theme" => "", 
    "discipline" => "" 
} 

filters.length4,但我想2獲取哈希的長度,不空值

+1

你的哈希看起來很奇怪 – Stefan 2014-09-24 13:24:24

+1

它既不是有效的Ruby對象也不是有效的JSON對象。 – sawa 2014-09-24 13:25:37

+0

什麼是「過濾器」? – sawa 2014-09-24 13:32:03

回答

5

使用count

filters = {"start_year"=>"2009", "end_year"=>"2011", "theme"=>"", "discipline"=>""} 

filters.count { |k, v| v.present? } 
#=> 2 
+0

'filters'從哪裏來? – sawa 2014-09-24 13:24:45

+1

@sawa加我的假設 – Stefan 2014-09-24 13:26:16

+0

謝謝!這確實是一個紅寶石散列;) – Paul 2014-09-24 14:39:57

0

您可以使用

filters.reject { |k, v| v.empty? }.length # => 2 
(誰擁有不僅一個關鍵,也是一個價值的)
+0

'filters'從哪裏來? – sawa 2014-09-24 13:26:32

+0

從問題:)。 「'filters.length'會是4,...」。 – 2014-09-24 13:27:51

+0

我想知道這個問題中的描述是否合理。 – sawa 2014-09-24 13:29:32

0

解析json字符串。使用Enumerable#select

require 'json' 

json_string = <<EOS 
{ 
    "filters": { 
    "start_year": "2009", 
    "end_year": "2011", 
    "theme": "", 
    "discipline": "" 
    } 
} 
EOS 

h = JSON.parse(json_string) 

和過濾值:

h['filters'].values.select { |x| x != "" } 
# => ["2009", "2011"] 
h['filters'].values.select { |x| x != "" }.size 
# => 2 
0
filters.values.reject(&:empty?).length 

如果空值保存爲nil,而不是''你可以使用:

filters.values.compact.length