我有一系列哈希,如下所示。假设我的数组是@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个项目。我做错了什么或如何消除零值?
答案 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"