in reply to sorting hashes
Once you have the element-to-index mapping of the array, it is straightforward to sort the keys or values of the original hash by these indices.
The preceding assumes that every value of the hash is an element of the array; it would be wise to validate this assumption.>perl -wMstrict -le "my @cols = qw(bar wobble mosh hop); my %hash = ( wibble => $cols[1], foo => $cols[0], hip => $cols[3], mish => $cols[2], ); my %i_map = map { $cols[$_] => $_ } 0 .. $#cols; print join ' ', qq{keys sorted by \@cols index of value: \n}, sort { $i_map{ $hash{$a} } <=> $i_map{ $hash{$b} } } keys %hash ; print join ' ', qq{values sorted by \@cols index of value: \n}, sort { $i_map{$a} <=> $i_map{$b} } values %hash ; " keys sorted by @cols index of value: foo wibble mish hip values sorted by @cols index of value: bar wobble mosh hop
|
|---|