NAME

List::GroupBy - Group a list of hashref's to a multilevel hash of hashrefs of arrayrefs

SYNOPSIS

use List::GroupBy qw( groupBy );

my @list = (
    { firstname => 'Fred',   surname => 'Blogs', age => 20 },
    { firstname => 'George', surname => 'Blogs', age => 30 },
    { firstname => 'Fred',   surname => 'Blogs', age => 65 },
    { firstname => 'George', surname => 'Smith', age => 32 },
    { age => 99 },
);

my %groupedList = groupBy ( [ 'surname', 'firstname' ], @list );

# %groupedList => (
#     'Blogs' => {
#         'Fred' => [
#             { firstname => 'Fred',   surname => 'Blogs', age => 20 },
#             { firstname => 'Fred',   surname => 'Blogs', age => 65 },
#         ],
#         'George' => [
#             { firstname => 'George', surname => 'Blogs', age => 30 },
#         ],
#     },
#     'Smith' => {
#         'George' => [
#             { firstname => 'George', surname => 'Smith', age => 32 },
#         ],
#     },
#     '' => {
#         '' => [
#             { age => 99 },
#         },
#     },
# )


%groupedList = groupBy(
    {
        keys => [ 'surname', 'firstname' ],
        defaults => { surname => 'Blogs' }
    },
    @list
);

# %groupedList => (
#     Blogs => {
#         Fred => [
#             { firstname => 'Fred',   surname => 'Blogs', age => 20 },
#             { firstname => 'Fred',   surname => 'Blogs', age => 65 },
#         ],
#         George => [
#             { firstname => 'George', surname => 'Blogs', age => 30 },
#         ],
#         '' => [
#             { age => 99 },
#         ],
#     },
#     Smith => {
#         George => [
#             { firstname => 'George', surname => 'Smith', age => 32 },
#         ],
#     },
# )


%groupedList = groupBy (
    {
        keys => [ 'surname', 'firstname' ],
        defaults => { surname => 'Blogs' },
        operations => { surname => sub { uc $_[0] } },
    },
    @list
);

# %groupedList => (
#     BLOGS => {
#         Fred => [
#             { firstname => 'Fred',   surname => 'Blogs', age => 20 },
#             { firstname => 'Fred',   surname => 'Blogs', age => 65 },
#         ],
#         George => [
#             { firstname => 'George', surname => 'Blogs', age => 30 },
#         ],
#         '' => [
#             { age => 99 },
#         ],
#     },
#     SMITH => {
#         George => [
#             { firstname => 'George', surname => 'Smith', age => 32 },
#         ],
#     },
# )

DESCRIPTION

List::GroupBy provides functions to group a list of hashrefs in to a hash of hashrefs of arrayrefs.

FUNCTIONS

LICENSE

Copyright (C) Jason Cooper.

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

AUTHOR

Jason Cooper JLCOOPER@cpan.org