Beefy Boxes and Bandwidth Generously Provided by pair Networks
Problems? Is your data what you think it is?

Re: sort after first char of hash key

by Cristoforo (Deacon)
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 the radiator hisses contentedly...

How do I use this? | Other CB clients
Other Users?
Others cooling their heels in the Monastery: (3)
As of 2016-12-10 18:52 GMT
Find Nodes?
    Voting Booth?
    On a regular basis, I'm most likely to spy upon:

    Results (164 votes). Check out past polls.