customers = [{ "Last Name":"Hardplace", "First Name":"Rockina", "ID":"6583142" },
{ "Last Name":"Bebblebrox", "First Name":"Zaphod", "ID":"6583143" }]
claims = [{ "ID"=>"6583143", "number"=>"123215", "start_date"=>"2018-10-04" },
{ "ID"=>"6583142", "number"=>"123214", "start_date"=>"2018-10-03" }]
def by_id(arr)
arr.each_with_object({}) { |g,h| h[g[:ID]] = g }
end
customers_by_id = by_id(customers)
#=> {"6583142"=>{:"Last Name"=>"Hardplace", :"First Name"=>"Rockina", :ID=>"6583142"},
# "6583143"=>{:"Last Name"=>"Bebblebrox", :"First Name"=>"Zaphod", :ID=>"6583143"}}
adj_claims = claims.map { |h| h.transform_keys { |k| k == "ID" ? :ID : k } }
#=> [{:ID=>"6583143", "number"=>"123215", "start_date"=>"2018-10-04"},
# {:ID=>"6583142", "number"=>"123214", "start_date"=>"2018-10-03"}]
claims_by_id = by_id(adj_claims)
#=> {"6583143"=>{:ID=>"6583143", "number"=>"123215", "start_date"=>"2018-10-04"},
# "6583142"=>{:ID=>"6583142", "number"=>"123214", "start_date"=>"2018-10-03"}}
При наличии идентификатора претензии, скажем, "6583142"
, информация о клиенте и претензиях содержится в хешах:
customers_by_id["6583142"]
#=> {:"Last Name"=>"Hardplace", :"First Name"=>"Rockina", :ID=>"6583142"}
и
claims_by_id["6583142"]
#=> {:ID=>"6583142", "number"=>"123214", "start_date"=>"2018-10-03"}
При желании парные хеши, имеющие одинаковые ID
, могут быть объединены, но в этом нет необходимости.
customers_by_id.keys.each_with_object({}) { |k,h|
h[k] = customers_by_id[k].merge(claims_by_id[k]) }
#=> {"6583142"=>{:"Last Name"=>"Hardplace", :"First Name"=>"Rockina",
# :ID=>"6583142", "number"=>"123214", "start_date"=>"2018-10-03"},
# "6583143"=>{:"Last Name"=>"Bebblebrox", :"First Name"=>"Zaphod",
# :ID=>"6583143", "number"=>"123215", "start_date"=>"2018-10-04"}}
Требуется вычисление adj_claims
, поскольку идентификатор представлен символом в customers
и строкой в claims
. См. Hash # transform_keys . Это символ в adj_claims
.