my $max = 10; my @values = 1 .. $max; my @values_mixed = shuffle(@values); my @top = topNbsAB(5, sub { $a <=> $b }, \@values_mixed); print join(" ",sort { $a <=> $b } @top),"\n";
I get a result like:
1 1 1 1 9
I'm also working out how to avoid the extra creation of zero-fill items. Ideally, I would replace them with the first n items of the input in reverse-sorted order. There are two reasons for this:
1) We cannot yet handle negative numbers.
2) We should be testing for the case that the input length is less than or equal to n, and in that case returning everything they gave us. Something like:
// Special case -- too few values provided. Just return them. if (len+1 <= n) { for( i = 0; i < len; i++ ) { SV *val = *av_fetch( data, i, 0 ); PUSHs( newSVsv( val ) ); } PUTBACK; XSRETURN(len+1); }
In reply to Re^7: Using $a and $b from XS
by tall_man
in thread Using $a and $b from XS
by tall_man
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |