Re: Sorting AofH over hash key(s)...



/usr/ceo wrote:
my $h = [
{ color => 'red', size => 1, width => 640, height => 480 },
{ color => 'blue', size => 4, width => 800, height => 600 },
{ color => 'green', size => 2, width => 1024, height => 768 },
{ color => 'orange', size => 5, width => 320, height => 280 },
{ color => 'purple', size => 3, width => 40, height => 50 },
];

I'd like to sort by the keys: color, size, width, and/or height. I
realize for only ONE hash key, I can do:

for my $info (sort { $a->{color} cmp $b->{color} } @{$h}) { blah() }
#...

But... What if I want to sort by say... color and then size? Or
height and then width? Or all the keys in some order? Again haven't
seen anything to do this. It's hard to imagine this has never been
solved, but then again, I've done a fair amount of Perl coding in my
day and I haven't run across the need to do this until recently.

The (somehow) canonical solution would be a sorter function like:

...
my @hs = sort mysortorder @$h;

sub mysortorder {
$a->{color} cmp $b->{color} ||
$b->{width} <=> $a->{width} ||
$b->{height} <=> $a->{height} ||
$b->{size} <=> $a->{size}
}

for my $s (@hs) {
print "$_=>$s->{$_}, " for keys %$s;
print "\n"
}
...

Regards

M.
.



Relevant Pages

  • Re: I dig stumperings.....
    ... infinite impregnability where no-one's troubled by buses. ... suggesting both within and among the keys. ... but one went sort of like this. ...
    (talk.religion.buddhism)
  • Re: a question for sorting keys in Map
    ... I have a Map, actually a TreeMap, which will automatically sort the keys ... You can write your own Comparator object which implements the Compare ... strings so that X10 comes after X2 instead of before it. ... Unix ls command sort file names the way you want your strings to sort. ...
    (comp.lang.java.programmer)
  • Re: sorting DBM hash
    ... a DBM Hash. ... The first sort routine prints out keys and value. ... An anonymous sub routine is used to hold sub routines ...
    (perl.beginners)
  • Re: Mergesort Vs Quicksort
    ... sort and quick sort are the same, ... but this month with the particular sequence of time reports ... keys which are not contiguous but instead split into multiple fields; ... my algorithms are progressively faster but use ...
    (comp.programming)
  • Sorting AofH over hash key(s)...
    ... I've searched this NG, the web, and CPAN and haven't seen anything to ... I'd like to sort by the keys: ... Also, my example, with a lot of numeric data is somewhat bad, I ...
    (comp.lang.perl.misc)