On Oct 3, JupiterHost.Net said:
I have a list of strings that start with an uppercase B, Q, or Z
I need to sort them so they are in order of Q, B , then Z
Any ideas or input on how to efficiently do that with sort() or even
map() is most appreciated :) perldoc -f sort|-f map didn't appear to
address this situation :(
Jeff 'japhy' Pinyan wrote:
I would use map() before and after sort() to "correct" leading characters.
my @sorted =
map { tr/123/QBZ/; $_ }
sort
map { tr/QBZ/123/; $_ }
@data;
Xavier Noria wrote:
> They all go in ASCII relative order except B <-> Q, thus a way to get
> it is to handle that special case and delegate to cmp the rest:
>
> my @sorted = sort {
> my $x = substr($a, 0, 1) . substr($b, 0, 1);
> $x eq "BQ" || $x eq "QB" ? $b cmp $a : $a cmp $b;
> } @array;
>
> I used the concatenation for clarity, you see the idea anyway if that's
> too expensive for your usage.
Brilliant! I'll benchmark those ideas :) Thanks you two!
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>