Beefy Boxes and Bandwidth Generously Provided by pair Networks
good chemistry is complicated,
and a little bit messy -LW
 
PerlMonks  

Re: Sorting Strings By Vowel Sequence

by AnomalousMonk (Archbishop)
on Nov 17, 2014 at 23:44 UTC ( [id://1107501]=note: print w/replies, xml ) Need Help??


in reply to Sorting Strings By Vowel Sequence

If you are dealing with lotsa data, the so-called Guttman-Rosler Transform (GRT, the second technique below; see A Fresh Look at Efficient Perl Sorting, which discusses both ST and GRT techniques) may be faster:

c:\@Work\Perl>perl -wMstrict -le "use Test::More 'no_plan'; use Test::NoWarnings; ;; VECTOR: for my $ar_vector ( [ [ qw(fanfare apparate panacea parmesan albatross albacore false v +ermeil candelabra beans) ], [ qw(apparate fanfare panacea albatross albacore false parmesan c +andelabra beans vermeil) ], ], ) { my ($ar_unsorted, $ar_expected) = @$ar_vector; my @unsorted = @$ar_unsorted; note qq{input: @$ar_unsorted}; ;; my @sorted = map $_->[0], sort { $a->[1] cmp $b->[1] } map [ $_, join '', m{ [aeiou]+ }xmsg ], @unsorted ; is_deeply \@sorted, $ar_expected, qq{ST: @sorted}; ;; @sorted = map { (split m{ \x00 }xms)[1] } sort map join(qq{\x00}, join('', m{ [aeiou]+ }xmsg), $_), @unsorted ; is_deeply \@sorted, $ar_expected, qq{GRT: @sorted}; ;; is_deeply \@unsorted, $ar_unsorted, qq{input data unchanged}; } " # input: fanfare apparate panacea parmesan albatross albacore false ve +rmeil candelabra beans ok 1 - ST: apparate fanfare panacea albatross albacore false parmesan + candelabra beans vermeil ok 2 - GRT: apparate fanfare panacea albatross albacore false parmesan + candelabra beans vermeil ok 3 - input data unchanged ok 4 - no warnings 1..4

Update: The
    map  join(qq{\x00}, join('', m{ [aeiou]+ }xmsg), $_),
expression in the GRT sort above is rather messy. A neater (tested) version is
    map  join('', m{ [aeiou]+ }xmsg, qq{\x00}, $_),

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others goofing around in the Monastery: (4)
As of 2024-04-25 12:15 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found