检查收集功能中的nil值

时间:2014-03-28 15:12:18

标签: ruby-on-rails ruby collect

我有一系列哈希,如下所示。假设我的数组是@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("|")但是即便这样也会在最终输出中返回3个项目。我做错了什么或如何消除零值?

2 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分: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"