Beefy Boxes and Bandwidth Generously Provided by pair Networks
"be consistent"

Re: Dictionary-style sort a la Tcl?

by blakem (Monsignor)
on Apr 18, 2002 at 10:38 UTC ( #160167=note: print w/replies, xml ) Need Help??

in reply to Dictionary-style sort a la Tcl?

Here is a quick late-night attempt.... It assumes the words only consist of [A-Za-z] and relatively small integers. Not perfect, but it does work on your sample dataset. Oh, it also sorts 'aa' before 'a1' which is probably not correct, but you didn't mention it in the requirements.
#!/usr/bin/perl -wT use strict; { # Create an interleaved 'AaBbCc' mapping my %map; $map{$_} = 2*(ord($_)-ord('A')) for 'A'..'Z'; $map{$_} = 2*(ord($_)-ord('a'))+1 for 'a'..'z'; # use interleaved map to munge word into a string that will sort "co +rrectly" sub dictize { my $word = shift; $word =~ s/(\d+|[A-Za-z])/chr($map{$1}||60+$1)/ge; return $word; } } my @words = qw(bigBoy bigbang bigboy x10y x9y x11y); # Sort based on lowercased munged words, # use the non-lowercased version as a tiebreaker my @sorted = map {$_->[0]} sort {$a->[1] cmp $b->[1] or $a->[2] cmp $b->[2]} map {[$_,dictize(lc),dictize($_)]} @words; print "$_\n" for @sorted; __END__ bigbang bigBoy bigboy x9y x10y x11y


Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://160167]
NodeReaper on the other hand, I've already bought the hammer....

How do I use this? | Other CB clients
Other Users?
Others having an uproarious good time at the Monastery: (8)
As of 2017-07-28 12:24 GMT
Find Nodes?
    Voting Booth?
    I came, I saw, I ...

    Results (428 votes). Check out past polls.