Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl-Sensitive Sunglasses
 
PerlMonks  

Re: sorting an array if sting having _

by wind (Priest)
on Dec 12, 2013 at 18:10 UTC ( #1066892=note: print w/ replies, xml ) Need Help??


in reply to sorting an array if sting having _

The underscore (_) comes after the decimals and capital letters using perl's cmp operator but before the lower case letters. If you'd like it to be before numbers, then simply create a custom sort by moving it before:

use strict; use warnings; my @foods = qw(abc abc1 abc2 abc_1 abc_2 abc01_1); # Create a Custom Sort my @sort_char_order = sort map {chr $_} (1..127); # Move '_' to before '0' in your list; my @your_char_order = map {$_ eq '0' ? ('_', '0') : $_ eq '_' ? () : $ +_} @sort_char_order; my $sort_char_order = join '', @sort_char_order; my $your_char_order = join '', @your_char_order; my $trans_word = eval qq{ sub { my \$param = shift; \$param =~ tr/\Q$your_char_order\E/\Q$sort_char_order\E/; return \$param; } }; # Sort by your custom definition my @sorted_foods = map { $_->[0] } sort { $a->[1] cmp $b->[1] } map { [ $_, $trans_word->($_) ] } @foods; print join ' ', @sorted_foods; # abc abc_1 abc_2 abc01_1 abc1 abc2
- Miller


Comment on Re: sorting an array if sting having _
Download Code

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1066892]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others about the Monastery: (10)
As of 2015-07-31 11:35 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (276 votes), past polls