Beefy Boxes and Bandwidth Generously Provided by pair Networks Bob
more useful options
 
PerlMonks  

RE: RE: Re: Sorting on Section Numbers

by jimt (Chaplain)
on Jul 28, 2000 at 14:08 UTC ( [id://24849]=note: print w/replies, xml ) Need Help??

This is an archived low-energy page for bots and other anonmyous visitors. Please sign up if you are a human and want to interact.


in reply to RE: Re: Sorting on Section Numbers
in thread Sorting on Section Numbers

There is a slight bug in this solution, it drops letters.
Using the above test data, the following list is generated:
1, 1.2, 2, 2.1.7, 2.2, 2.13, 3.4, 10.1, 10.1, 10.10
which dropped the letters from the section headings.
Here's my version:
@sorted = map {$_->[0], ", "} sort {$a->[0] <=> $b->[0]} map {[$_, pack ("N*", $_)]} @unsorted;

it works the same way, but I substituted in a Schwartzian transform to cache the original value of the heading instead of unpacking it again later. According to some tests with Benchmark, it's about 40% faster than doing the unpack later.
Plus it keeps letters intact.

Replies are listed 'Best First'.
RE: RE: RE: Re: Sorting on Section Numbers
by DrManhattan (Chaplain) on Jul 28, 2000 at 14:37 UTC
RE {4} Sorting on Section Numbers
by turnstep (Parson) on Jul 28, 2000 at 17:27 UTC

    > it works the same way, but I substituted in a Schwartzian transform to cache the original
    > value of the heading instead of unpacking it again later. According to some tests with
    > Benchmark, it's about 40% faster than doing the unpack later. Plus it keeps letters intact.

    Unfortunately, there are two problems with this code:

    @sorted = map {$_->[0], ", "} sort { $a->[0] <=> $b->[0]} map {[$_, pack ("N*", $_)]} @unsorted;

    First, the map arguments should be reversed or the sort subscripts should be "1" not "0". As it is, all the code does is a simple sort, and ignores the whole pack part! Second, even when it is fixed, it does not quite sort correctly:

    @unsorted = qw(2 1.2a 2.2 1.2 1.1a); ## A fixed version: @sorted = map {$_->[0], ", "} sort { $a->[1] <=> $b->[1]} map {[$_, pack ("N*", $_)]} @unsorted; print @sorted, "\n"; ## produces: 1.2a, 1.1a, 1.2, 2, 2.2
RE: RE: RE: Re: Sorting on Section Numbers
by chip (Curate) on Jul 28, 2000 at 18:40 UTC
    Of course that solution drops letters. That was the whole point, demonstrating that things get a lot simpler without them. Quoting myself:

    If we simplify the problem space by eliminating the alphanumerics, things get even neater.

        -- Chip Salzenberg, Free-Floating Agent of Chaos

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://24849]
help
Sections?
Information?
Find Nodes?
Leftovers?
    Notices?
    hippoepoptai's answer Re: how do I set a cookie and redirect was blessed by hippo!
    erzuuliAnonymous Monks are no longer allowed to use Super Search, due to an excessive use of this resource by robots.