in reply to Counting elements in array of cases
Preserves order of both targetL and origin.
#!/usr/bin/perl use strict; # https://perlmonks.org/?node_id=11106779 use warnings; use List::Util qw( uniq ); my @AoH = ( { count => 1, origin => "AMG", targetL => "foisonnement" }, { count => 1, origin => "IDBR", targetL => "foisonnement" }, { count => 1, origin => "IWWF", targetL => "gonfler" }, { count => 1, origin => "IWWF", targetL => "due" }, { count => 1, origin => "IWWF", targetL => "due" }, ); my %seen; my @AoHfinal = grep { if( my $prev = $seen{$_->{targetL}} ) { $prev->{count} += $_->{count}; $prev->{origin} = join ' ', uniq split(' ', $prev->{origin}), $_-> +{origin}; 0 # skip duplicate } else { $seen{$_->{targetL}} = $_; } } @AoH; use Data::Dump 'dd'; dd @AoHfinal;
Outputs:
( { count => 2, origin => "AMG IDBR", targetL => "foisonnement" }, { count => 1, origin => "IWWF", targetL => "gonfler" }, { count => 2, origin => "IWWF", targetL => "due" }, )
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: Counting elements in array of cases
by LanX (Saint) on Sep 27, 2019 at 15:37 UTC | |
by tybalt89 (Monsignor) on Sep 27, 2019 at 17:13 UTC | |
by tybalt89 (Monsignor) on Sep 27, 2019 at 21:09 UTC | |
by rsFalse (Chaplain) on Sep 27, 2019 at 22:35 UTC | |
by LanX (Saint) on Sep 27, 2019 at 18:04 UTC | |
by LanX (Saint) on Sep 28, 2019 at 13:23 UTC | |
by rsFalse (Chaplain) on Sep 28, 2019 at 18:19 UTC | |
by LanX (Saint) on Sep 28, 2019 at 19:12 UTC |