use strict; use warnings; use Data::Dump qw/pp dd/; my @sorted_data = ( { 'count_payment' => '', 'count_banking' => '31 (62.00)', 'name' => 'Parking Eye [LTD] One', }, { 'count_payment' => '10 (144.00)', 'count_banking' => '', 'name' => 'Parking Eye [LTD] Two', }, { 'count_payment' => '2 (80.42)', 'count_banking' => '', 'name' => 'Parking Eye [LTD] Three', }, { 'count_payment' => '', 'count_banking' => '4 (982.00)', 'name' => 'Parking Eye [LTD] Two', } ); my %tmp; my $order = 0; for my $record (@sorted_data) { my $target = \ $tmp{$record->{name}}; $$target->{name} = $record->{name}; $$target->{_order} //= $order++; for (qw/count_banking count_payment/){ $$target->{$_} .= $record->{$_}; } } my @new_sorted_data = sort { $a->{_order} <=> $b->{_order} } values %tmp; delete $_->{_order} for @new_sorted_data; pp \@new_sorted_data;
-*- mode: compilation; default-directory: "d:/exp/" -*- Compilation started at Tue Jul 14 11:51:06 C:/Perl_524/bin\perl.exe -w d:/exp/pm_hash_join.pl [ { count_banking => "31 (62.00)", count_payment => "", name => "Parking Eye [LTD] One", }, { count_banking => "4 (982.00)", count_payment => "10 (144.00)", name => "Parking Eye [LTD] Two", }, { count_banking => "", count_payment => "2 (80.42)", name => "Parking Eye [LTD] Three", }, ] Compilation finished at Tue Jul 14 11:51:07
Cheers Rolf
(addicted to the Perl Programming Language :)
Wikisyntax for the Monastery
In reply to Re^2: How to merge two arrays within the hash of arrays based on unique name.
by LanX
in thread How to merge two arrays within the hash of arrays based on unique name.
by Sami_R
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |