[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Omaha.pm] Sort an array of arrayrefs by one of the elements of each arrayref



How's this for an (err... another) obscure sample program? Yes, I'm
actually wresting this in real life today. :)

j


# Given an array of arrayrefs like so:

my @x = (
  [ 0,0,0, "blue" ],
  [ 1,1,1, "blue" ],
  [ 2,2,2, "yellow" ],
  [ 3,3,3, "yellow" ],
  [ 4,4,4, "yellow" ],
  [ 5,5,5, "red" ],
  [ 6,6,6, "red" ],
);

# Sort those arrayrefs if the following (arbitrary) order: yellow, blue,
red.

# Solution:

my @y = sort by_color_preference @x;

sub by_color_preference {
   my %pref = (
      yellow => 1,
      blue   => 2,
      red    => 3
   );
   # print $pref{$a->[3]} . " <=> " . $pref{$b->[3]} . "\n";
   $pref{$a->[3]} <=> $pref{$b->[3]};
}