Beefy Boxes and Bandwidth Generously Provided by pair Networks
Just another Perl shrine
 
PerlMonks  

Re: Sorting numerials first and then numerials with alpha characters last

by haukex (Bishop)
on Oct 29, 2021 at 13:31 UTC ( #11138210=note: print w/replies, xml ) Need Help??


in reply to Sorting numerials first and then numerials with alpha characters last

Though there are ways to do it in a single pass, I found it a bit easier to think about if one first splits the list out into two and then sorts them individually. Note I'm using Sort::Key::Natural to sort the mixed values in a hopefully intuitive way (Update: you may note I added the test case "12c" to demonstrate the difference to a simple sort).

use warnings; use strict; use Test::More; use List::Util qw/uniq/; use Sort::Key::Natural qw/natsort/; my @in = ( "2bc", "1", "12c", "12", "21", "1", "1a", "2", "2", "2", "2", "3", "35", "31", "2b", "4", "42", "5", "51", "2ac", "52", "6", "7" ); my @expect = ( "1", "2", "3", "4", "5", "6", "7", "12", "21", "31", "35","42", "51", "52", "1a", "2ac", "2b", "2bc", "12c" ); my (@nums, @mixed); /^\d+$/ and push @nums, $_ or push @mixed, $_ for @in; my @out = uniq( sort( { $a <=> $b } @nums), natsort(@mixed), ); is_deeply \@out, \@expect or diag explain \@out; done_testing;

As opposed to your previous thread, these tags look much more like HTML/XML, so you really should use an appropriate parser!

Replies are listed 'Best First'.
Re^2: Sorting numerials first and then numerials with alpha characters last
by ikegami (Patriarch) on Oct 29, 2021 at 18:27 UTC

    That code assumes sort is stable. Use use sort 'stable'; to guarantee that.

      That code assumes sort is stable. Use use sort 'stable'; to guarantee that.

      what?

        Chaining sorts only works for stable sorts. What is stability in sorting algorithms and why is it important?

        Perl's sort isn't even stable in all versions of Perl, so the solution won't work in all existing versions of Perl.

        Perl's sort isn't guaranteed to be a stable sort, so the solution isn't guaranteed to work in future versions of Perl.

        But, you can tell sort to use a stable algorithm using use sort 'stable';.

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others studying the Monastery: (5)
As of 2022-01-20 23:15 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    In 2022, my preferred method to securely store passwords is:












    Results (57 votes). Check out past polls.

    Notices?