Beefy Boxes and Bandwidth Generously Provided by pair Networks
Don't ask to ask, just ask

Re: sort after first char of hash key

by Cristoforo (Curate)
on Jun 03, 2011 at 00:38 UTC ( #907901=note: print w/replies, xml ) Need Help??

in reply to sort after first char of hash key

Here is the Guttman-Rosler Transform.

#!/usr/bin/perl use strict; use warnings; use 5.012; use List::Util qw/ shuffle /; srand(1); # to get same random 'shuffle' from run to run my @list = shuffle (qw/ Y2 A15 YABBA287 DABBA345 DOO777/, map {"E$_"} +(1..20)); say "UNSORTED"; say "@list"; my @sorted = map { my $strlength = unpack("C", substr($_, -1)); substr $_, -1 * (1 + $strlength), -1; } sort map { pack "a*Na*C", /(\D+)(\d+)/, $_, length} @list; say "SORTED"; say "@sorted";

The advantage of this sort is that it uses a simple alphabetical sort. Its is usually the fastest performing sort. The configuration here will sort any 'alpha'+'number' string, not just a single leading letter plus a number.

Update: The setup here is limited to strings of length <= 255. If the strings to be sorted are longer than that, you would have to make some changes. Also, to make the sort case insensitive, which is usually the desired outcome, the first map could be restated as:

map { pack "a*Na*C", (map {lc} /(\D+)(\d+)/), $_, length} @list;

by adding the lc operator.

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://907901]
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others avoiding work at the Monastery: (3)
As of 2018-05-20 14:30 GMT
Find Nodes?
    Voting Booth?