2014-03-28 32 views
0

我有一個哈希數組,如下所示。假設我的數組是@fruits_list:檢查收集函數內的零值

[ 
    {:key_1=>15, :key_2=>"Apple"}, 
    {:key_1=>16, :key_2 =>"Orange"}, 
    {:key_1=>17, :key_2 =>" "} 
] 

我想使用'|'連接哈希中的值;但我的最終輸出不應包含零值。我將它連接使用:

@fruits_list.collect { |hsh| hsh[:key_2] }.join("|") 

但是這會增加無我的輸出,所以我最後的輸出有3項{「蘋果」 | 「橙色」| 「」}。我想要列表中的2個項目,並希望消除零值,所以我的最終輸出應該看起來像{「Apple」| 「橙子」}。

我嘗試過:@fruits_list.collect { |hsh| hsh[:key_2] unless hsh[:key_2].nil? }.join("|"),但即使這樣也會在最終輸出中返回3個項目。我做錯了什麼,或者我該如何消除零值?

+4

那不是'nil'值,它的'空格' – Bala

+0

除非hsh [:key_2] .blank?會做你想做的。正如巴拉說零不會起作用 –

回答

1
a = [ 
    {:key_1=>15, :key_2=>"Apple"}, 
    {:key_1=>16, :key_2 =>"Orange"}, 
    {:key_1=>17, :key_2 =>" "} 
] 

a.collect{ |hsh| hsh[:key_2] unless hsh[:key_2] =~ /\s+/}.compact.join("|") 

#=> "Apple|Orange" 
+0

你能否詳細說明你的答案? – Rico

+0

試過這個。我沒有得到任何輸出。 –

+0

@bala好回答 –

3

可以使用在非空值過濾:

a.collect{ |h| h[:key_2] }.select(&:present?).join('|') 

present?方法返回true只有當事情是足夠「非空白」,即空字符串,字符串的空格組成,空數組,空哈希都被視爲空白。

+0

在ruby中我們不能使用現在嗎?方法與字符串。 –

+0

這個答案會拋出錯誤。 –

+0

@AlokAnand這個問題被標記爲Ruby on Rails,所以'present?'應該被定義爲它是ActiveSupport的一部分。 – tadman