Thank you, Jason and Dan!  These are both great solutions and help me to
achieve my goal.  Thank you for your suggestions!!

On Fri, Aug 3, 2018 at 11:12 AM Dan Book <[email protected]> wrote:

> An alternative using Mojo::Collection::Role::UtilsBy:
>
> use Mojo::Collection 'c';
> use Mojo::Util 'dumper';
>
> my $start = c({name => 'name1', total => 2}, {name => 'name1', total =>
> 3}, {name => 'name2', total => 7})->with_roles('+UtilsBy');
> my $end = c(map { $_->reduce(sub { $a->{total} += $b->{total}; $a }) }
> values %{$start->partition_by(sub { $_->{name} })});
> print dumper $end->to_array;
>
> -Dan
>
> On Fri, Aug 3, 2018 at 11:27 AM Jason Cooper <[email protected]>
> wrote:
>
>> You'd probably need to reduce it to a hash of name to total and then map
>> that back to a Mojo::Collection, e.g.:
>>
>> #!/usr/bin/env perl
>>
>> use strict;
>> use warnings;
>>
>> use Mojo::Collection;
>> use Data::Dumper;
>>
>> my $collection= Mojo::Collection->new({name=>"name1", total=>2},
>> {name=>"name1",total=>3}, {name=>"name2", total=>7});
>>
>>
>> my $firstPass = $collection->reduce( sub {
>>         $a->{$b->{name}} += $b->{total};
>>
>>         return $a;
>>     }, {});
>>
>> my $newCollection = Mojo::Collection->new(
>>     map {
>>         { name => $_, total => $firstPass->{$_} }
>>     } keys %{$firstPass}
>> );
>>
>> print Dumper($collection);
>> print Dumper($newCollection);
>>
>>
>>
>>
>> On Friday, 3 August 2018 13:50:19 UTC+1, Stefan Adams wrote:
>>>
>>> I have a Mojo::Collection of hashes and I'd like to reduce the
>>> collection similar to an SQL GROUP BY.
>>>
>>> Mojo::Collection->new({name=>"name1", total=>2},
>>> {name=>"name1",total=>3}, {name=>"name2", total=>7})
>>>
>>>
>>> This collection has three elements and the collection I'm looking for
>>> would have two:
>>>
>>> {name=>"name1", total=>*5*}, {name=>"name2",total=>7}
>>>
>>>
>>> I'm trying to group by name and then sum the totals within that group.
>>>
>>> It seems like I should use the reduce method of Mojo::Collection; if
>>> that's appropriate, how could I accomplish that?
>>>
>> --
>> You received this message because you are subscribed to the Google Groups
>> "Mojolicious" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to [email protected].
>> To post to this group, send email to [email protected].
>> Visit this group at https://groups.google.com/group/mojolicious.
>> For more options, visit https://groups.google.com/d/optout.
>>
> --
> You received this message because you are subscribed to the Google Groups
> "Mojolicious" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To post to this group, send email to [email protected].
> Visit this group at https://groups.google.com/group/mojolicious.
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups 
"Mojolicious" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/mojolicious.
For more options, visit https://groups.google.com/d/optout.

Reply via email to