Sort in return statement
SimonN
eiderdaus at gmail.com
Sat Dec 9 04:31:33 UTC 2017
On Saturday, 9 December 2017 at 03:24:52 UTC, codephantom wrote:
> On Saturday, 9 December 2017 at 02:45:35 UTC, rjframe wrote:
>>
>> `sort` returns a SortedRange of ushorts, not an array of
>> ushorts. Make it:
>>
>> ```
>> import std.array : array;
>> return sort(numbers.take(8)).array;
>> ```
>>
>> --Ryan
>
> That's it!
>
> Thanks Ryan.
Yes, this works, and your algorithm would even accept arbitary
random-access ranges, not merely arrays.
But since we start explicitly with a ushort[] that this function
has allocated just for this algorithm, we could save the extra
allocation by the final call to array().
// ushort[] numbers = ...
randomShuffle(numbers);
import std.algorithm.sorting : sort;
numbers = numbers[0 .. 8];
sort(numbers);
return numbers;
sort(numbers) does two things: (1) affect the underlying data,
(2) return an input range with extra information that this
returned range is sorted. But in our example, we don't need to
allocate a fresh array from (2). We can return the sorted data
from (1), this is already in array-form.
-- Simon
More information about the Digitalmars-d-learn
mailing list