in reply to Hash of Array Sort question

use strict; use warnings; use Data::Dumper qw( Dumper ); my $hash = { k1 => [5, 'b1', 'c1', 1], k2 => [4, 'b2', 'c2', 1], k3 => [4, 'b3', 'c3', 3], k4 => [5, 'b4', 'c4', 3], }; my $d_group; my $a_group; my $prio; for my $rec ( sort { $a->[3] <=> $b->[3] || $b->[0] <=> $a->[0] } values(%$hash) ) { if (!defined($d_group) || $rec->[3] != $d_group) { $d_group = $rec->[3]; $a_group = $rec->[0]; $prio = 1; } elsif ($rec->[0] != $a_group) { ++$prio; } $rec->[4] = $prio; } local $Data::Dumper::Sortkeys = 1; print(Dumper($hash));
$VAR1 = { 'k1' => [ 5, 'b1', 'c1', 1, 1 ], 'k2' => [ 4, 'b2', 'c2', 1, 2 ], 'k3' => [ 4, 'b3', 'c3', 3, 2 ], 'k4' => [ 5, 'b4', 'c4', 3, 1 ] };

Update: Added test code. Tested. Fixed bug in sort expression.

Replies are listed 'Best First'.
Re^2: Hash of Array Sort question
by sri1230 (Novice) on Mar 18, 2010 at 16:37 UTC
    There is one problem with that...the priority does not start from 1 for a different d_group
      It does in your example, and that's the only place you mentioned what the values for priority should be. If it's not right, you'll need to explain what it should be.