检查收集function中的nil值

我有一系列哈希,如下所示。 说我的数组是@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("|") 

但是这在我的输出中增加了nil,所以我的最终输出有3个项目{“Apple”| “橙色”| “”}。 我想在我的列表中有两个项目,并希望消除零值,所以我的最终输出应该看起来像{“Apple”| “橙子”}。

我试过了: @fruits_list.collect { |hsh| hsh[:key_2] unless hsh[:key_2].nil? }.join("|") @fruits_list.collect { |hsh| hsh[:key_2] unless hsh[:key_2].nil? }.join("|") @fruits_list.collect { |hsh| hsh[:key_2] unless hsh[:key_2].nil? }.join("|")但是这甚至会在最终输出中返回3个项目。 我做错了什么或如何消除零值?

您可以使用以下方法过滤非空值:

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

present? 只有当事物足够“非空白”时,方法才返回true ,即空字符串,由空格组成的字符串,空数组,空哈希都被视为空白。

 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"