The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

Sort::Tree - Organize list of objects into parent/child order.

SYNOPSIS

use Sort::Tree;

my @tree = list_to_tree(\@my_list, 
                        $id_field, 
                        $parent_field);

my @sorted_list = tree_to_list(\@tree,
                               [$id_field],
                               [\&Sort::Tree::numerically],
                               $parent_field));

DESCRIPTION

Sort::Tree includes two routines, list_to_tree and tree_to_list. These are used to organize an unordered list of objects into a tree form. For example, you'd perform a database query to gain a list of folders in a document system, and then order them by parentage for display in a webpage.

EXAMPLE

use Sort::Tree;

my @creatures = (
             { id => 1, class => -1, name => 'animal' },
             { id => 2, class => 1,  name => 'mammal' },
             { id => 3, class => 1,  name => 'bird' },
             { id => 4, class => 1,  name => 'reptile' },
             { id => 5, class => 2,  name => 'primate' },
             { id => 6, class => 2,  name => 'feline' },
             { id => 7, class => 5,  name => 'human' },
             { id => 8, class => 6,  name => 'housecat' },
             { id => 9, class => 3,  name => 'penguin' },
             { id => 10,class => 4,  name => 'gecko' }
             );

my @tree = Sort::Tree::list_to_tree(\@creatures, 'id', 'class');

foreach my $row (Sort::Tree::tree_to_list(\@tree,
                                      ['id'],
                                      [\&Sort::Tree::numerically],
                                      'class')) {
    print ' ' x $row->{class}, $row->{name}, "\n";
}

The following is displayed:

animal mammal primate human feline housecat bird penguin reptile gecko

METHODS

list_to_tree($list, $idField, $parentField)

Takes a list of queried objects and builds a tree, resorting it into tree order and including the nesting level. Inspired by DBIx::Tree.

tree_to_list(tree, cmpFields, cmpFuncs, idField, depth, max_depth)

Takes a tree and serializes it into a sorted list. Recursive. Inspired by DBIx::Tree (but not derived from it)

Parameters:
  $tree - the tree data structure
  $cmpFields - Field to do comparison on (default idField)
  $cmpFuncs - Ordering function (default &numerically)
  $idField - 
  $depth - Depth to display (default 0)
  $max_depth - Maximum depth to display; -1 for all (default -1)

PREREQUISITES

Nothing outside of the normal Perl core modules (Exporter & Carp).

BUGS

In tree_to_list, various ordering mechanisms are permitted, but only the 'numerically' option works.

VERSION

1.07 - Released on 2003/06/19.

SEE ALSO

perl(1)

AUTHOR

Bryce Harrington <bryce@osdl.org>

http://www.osdl.org/

COPYRIGHT

Copyright (C) 2003 Bryce Harrington. All Rights Reserved.

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

REVISION

Revision: $Revision: 1.7 $