2015-03-24 44 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!)形式使用塊來確定兩個散列中正在合併的鍵的值。