in reply to Re: Hash sorting (by value) woes
in thread Hash sorting (by value) woes

That makes sense. Thanks.

-s.

Replies are listed 'Best First'.
Re^3: Hash sorting (by value) woes
by ikegami (Patriarch) on Feb 24, 2005 at 17:14 UTC

    Here's an optmization that only executes the regexp once per string:

    @sorted_keys = map { $_->[0] } sort { $a->[1] <=> $b->[1] } map { $etcpw->{$_} =~ /:(\d+)/; [ $_, $1 ] } keys %{$etcpw}; print "$etcpw->{$_}\n" foreach @sorted_keys;

    We can even drop a step:

    print "$etcpw->{$_->[0]}\n" foreach sort { $a->[1] <=> $b->[1] } map { $etcpw->{$_} =~ /:(\d+)/; [ $_, $1 ] } keys %{$etcpw};
      Of course, if you really want to use map instead of foreach:
      print map {"$etcpw->{$_}\n"} sort { $a->[1] <=> $b->[1] } map { $etcpw->{$_} =~ /:(\d+)/; [ $_, $1 ] } keys %{$etcpw};

      Caution: Contents may have been coded under pressure.

        True, but it would be slower.

        print map { ...1... } ...2...;

        is closer to

        @temp_list = map { ...1... } ...2...; print @temp_list;

        than to

        print ...1... foreach ...2...;

        The extra assignment slows things down. (About twice as slow, IIRC previous tests.)

        Update: Fixed brain fart R.J. noticed.