Another ternary approach that gathers '-' elements to the lowest indices of the output array regardless of the numeric value of any other elements to be sorted, e.g., negative values.
>perl -wMstrict -le
"my @unsorted = (1, 10, '-', 2, -3, 20, '-', '-', 3, 0, 2, 11, 8, 7);
;;
my @sorted = sort numeric_ascending_with_dash_leftmost @unsorted;
print qq{@sorted};
;;
@sorted = sort { -numeric_ascending_with_dash_leftmost() } @unsorted;
print qq{reversed: @sorted};
;;
print qq{still unsorted: @unsorted};
;;
sub numeric_ascending_with_dash_leftmost {
return $a eq '-' ? -1 :
$b eq '-' ? 1 :
$a <=> $b
;
}
"
- - - -3 0 1 2 2 3 7 8 10 11 20
reversed: 20 11 10 8 7 3 2 2 1 0 -3 - - -
still unsorted: 1 10 - 2 -3 20 - - 3 0 2 11 8 7
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.
|