Beefy Boxes and Bandwidth Generously Provided by pair Networks
P is for Practical
 
PerlMonks  

Re: sorting based on a list

by alfie (Pilgrim)
on May 09, 2001 at 18:19 UTC ( [id://79092]=note: print w/replies, xml ) Need Help??


in reply to sorting based on a list

If you are really going to sort by the first letter only in a special order you might try it with this:
my $sortstr = join('', @list); my @sorted_list = sort { index($sortstr,substr($a,0,1)) <=> index($sortstr,substr($b,0,1)) || $a <=> $b } @list2;
The first will compare the first letter only, the later will compare if the first letter is equal.
--
use signature; signature(" So long\nAlfie");

Replies are listed 'Best First'.
Re: Re: sorting based on a list
by ChemBoy (Priest) on May 09, 2001 at 19:05 UTC

    Nice idea--I propose the following modification, to dump extra words at the end (and to use string comparison, of course):

    my $sortstr = join('', @list); my @sorted_list = sort { rindex($sortstr,substr($b,0,1)) <=> rindex($sortstr,substr($a,0,1)) || $a cmp $b } @list2;

    Of course, you might want words that start with letters not in the list to be at the front, in which case, alphie's solution is preferable (aside from using <=> instead of cmp).

    Update: doh! It doesn't do what I thought it did! Fix coming...
    Fix here:

    my $sortstr = join('', @list); my @sorted_list = sort { my ($tmp1,$tmp2); (($tmp1 = index($sortstr,substr($a,0,1))) >= 0 ? $tmp1 : length($sort +str)) <=> (($tmp2 = index($sortstr,substr($b,0,1))) >= 0 ? $tmp2 : length($sort +str)) || $a cmp $b } @list2;



    If God had meant us to fly, he would *never* have give us the railroads.
        --Michael Flanders

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others scrutinizing the Monastery: (8)
As of 2024-04-18 13:23 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found