簡體   English   中英

迭代哈希數組並在一行中輸出每次迭代

[英]Iterate an array of hashes and output each iteration in a row

我有一個哈希數組,例如:

[{:number=>2131, :owner=>"Mark"},
 {:number=>223, :owner=>"Mark"},
 {:number=>546, :owner=>"Mark"},
 {:number=>765454, :owner=>"Tom"},
 {:number=>845378, :owner=>"Jack"},
 {:number=>75, :owner=>"Jack"},
 {:number=>2342, :owner=>"Jack"}]

如何輸出按行排序的所有者的數字值以獲取此信息:

# ["Jack", "Mark", "Tom"]
75 223 765454
2342 546 -
845378 2131 -

具有排序數字的每一列都屬於一個所有者,每行包含來自每個所有者的數字。

關於什么

a = [{:number=>2131, :owner=>"Mark"},
     {:number=>223, :owner=>"Mark"},
     {:number=>546, :owner=>"Mark"},
     {:number=>765454, :owner=>"Tom"},
     {:number=>845378, :owner=>"Jack"},
     {:number=>75, :owner=>"Jack"},
     {:number=>2342, :owner=>"Jack"}]

a1 = a.group_by { |h| h[:owner]  }
#=> {"Mark"=>[{:number=>2131, :owner=>"Mark"}, {:number=>223, :owner=>"Mark"}, {:number=>546, :owner=>"Mark"}], "Tom"=>[{:number=>765454, :owner=>"Tom"}], "Jack"=>[{:number=>845378, :owner=>"Jack"}, {:number=>75, :owner=>"Jack"}, {:number=>2342, :owner=>"Jack"}]}

a2 = a1.map { |k, v| [k, v.sort_by { |v| v[:number] } ] }
#=> [["Mark", [{:number=>223, :owner=>"Mark"}, {:number=>546, :owner=>"Mark"}, {:number=>2131, :owner=>"Mark"}]], ["Tom", [{:number=>765454, :owner=>"Tom"}]], ["Jack", [{:number=>75, :owner=>"Jack"}, {:number=>2342, :owner=>"Jack"}, {:number=>845378, :owner=>"Jack"}]]]

a3 = a2.sort_by { |(v0)| v0 }.to_h
#=> {"Jack"=>[{:number=>75, :owner=>"Jack"}, {:number=>2342, :owner=>"Jack"}, {:number=>845378, :owner=>"Jack"}], "Mark"=>[{:number=>223, :owner=>"Mark"}, {:number=>546, :owner=>"Mark"}, {:number=>2131, :owner=>"Mark"}], "Tom"=>[{:number=>765454, :owner=>"Tom"}]}

max_values_size = a3.values.max_by { |v| v.size }.size
#=> 3

a4 = max_values_size.times.map do |i|
  a3.keys.map do |k|
    a3[k][i] ? a3[k][i][:number] : '-'
  end
end
#=> [[75, 223, 765454], [2342, 546, "-"], [845378, 2131, "-"]]

a4.each { |v| puts v.join(' ') }
#=>
75 223 765454 
2342 546 - 
845378 2131 -

應該很不言自明,問是否不清楚

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM