2015-03-24 42 views
1

我有以下阵列(这是一个更大的哈希值的一部分):解析哈希打印到一个很好的格式化字符串

[{"type"=>"work", "value"=>"[email protected]"}, {"type"=>"home", "value"=>"[email protected]"}, {"type"=>"home", "value"=>"[email protected]"}] 

我想以某种方式采取并将其转换成一个整齐的格式化字符串如:

Work: [email protected], Home: [email protected], Home: [email protected] 

问题是这个数组现在总是相同的,有时它会有2封电子邮件,有时是5封,有时没有。更糟糕的是,甚至可能有重复。例如两个家庭电子邮件。

+1

应该如何输出的样子,如果有多个电子邮件或多个家庭条目?你能给个例子吗? – hek2mgl 2015-03-25 00:03:19

+0

@ hek2mgl完成。不需要做任何特别的事情。谢谢! – Zack 2015-03-25 00:04:26

+0

你告诉'这个问题是......' – hek2mgl 2015-03-25 00:06:13

回答

0

你可以写:

arr = [{ "type"=>"work", "value"=>"[email protected]" }, 
     { "type"=>"home", "value"=>"[email protected]" }, 
     { "type"=>"cottage", "value"=>"[email protected]" }, 
     { "type"=>"home", "value"=>"[email protected]" }, 
     { "type"=>"cottage", "value"=>"[email protected]" }] 

h = arr.each_with_object({}) { |g,h| 
    h.update(g["type"]=>[g["value"]]) { |_,o,n| o+n } } 
    #=> {"work"=>["[email protected]"], 
    # "home"=>["[email protected]", "[email protected]"], 
    # "cottage"=>["[email protected]", "[email protected]"]} 

puts h.map { |k,v| "#{k.capitalize}: #{v.join(', ')}" }.join("\n") 
    # Work: [email protected] 
    # Home: [email protected], [email protected] 
    # Cottage: [email protected], [email protected] 

它使用的Hash#update(又名merge!)形式使用块来确定两个散列中正在合并的键的值。