"be consistent" PerlMonks

### Re: Complex Sort - using varying numbers of parameters

by amphiplex (Monk)
 on Jul 04, 2002 at 12:33 UTC ( #179440=note: print w/replies, xml ) Need Help??

Hi !

This script should do what you want, specifically my_sort(), the rest is just to get a test environment.
```use strict;

sub my_sort {
my \$max_index = \$#{@{\$a->{Path}}} >  \$#{@{\$b->{Path}}} ? \$#{@{\$a->{P
+ath}}} : \$#{@{\$b->{Path}}};
for (0..\$max_index) {
my \$r = \$a->{Path}->[\$_] <=> \$b->{Path}->[\$_];
return \$r if \$r;
}
return 0;
}

sub print_tree {
my \$tree = shift;
for my \$member (@\$tree) {
print join (' ', @{\$member->{Path}})."\n";
}
}

my \$input = <<EOF;

5 32 37
5 32 38
5 32 39
3 12 11 19 20
3 12 11 21
3 12 22
3 12 23
5 32 40
3 12 24
5 32 41
3 25
5 32 42
2 26
5 32 43
2 26 27
2 26 28
2 26 29
0 1
1 2
1 3
3 12 10
1 4
3 12 11
1 5
3 12
2 6
3 12 13
3 12 7
3 12 11 19 14
3 12 8
2 26 30
3 12 11 19 15
3 12 9
5 32 31
3 12 11 19 16
5 32
3 12 11 19 17
5 32 33
3 12 11 19 18
5 32 34
3 12 11 19
5 32 35
5 32 36
EOF

#
# prepare array of hashes
#
my @Tree;
for (split "\n", \$input) {
my @a = split (' ', \$_);
push @Tree, {Path=>\@a};
}

print "ORIGINAL:\n";
print_tree(\@Tree);

my @Tree_sorted = sort my_sort @Tree;

print "SORTED:\n";
print_tree(\@Tree_sorted);
---- kurt

Replies are listed 'Best First'.
Re: Re: Complex Sort - using varying numbers of parameters
by RMGir (Prior) on Jul 04, 2002 at 12:46 UTC
The problem with doing it this way is that you're going to be running "my_sort" many many times, introducing a lot of overhead.

That's what the Schwartzian Transform, GRT, or Orcish Maneuvre save you from; they only compute each key once.

George_Sherston's original solution also avoided recomputing keys unnecessarily, by storing them in ->{Sort} beforehand.
--
Mike

Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://179440]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others pondering the Monastery: (3)
As of 2021-08-04 06:27 GMT
Sections?
Information?
Find Nodes?
Leftovers?
Voting Booth?
My primary motivation for participating at PerlMonks is: (Choices in context)

Results (41 votes). Check out past polls.

Notices?