0

我有一个哈希数组,如下所示。假设我的数组是@fruits_list:

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

我想使用'|'加入散列中的值;但我的最终输出不应包含 nil 值。我使用以下方式连接它:

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

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

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

4

2 回答 2

3

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

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

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

于 2014-03-28T16:17:18.660 回答
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"
于 2014-03-28T15:22:53.707 回答