sortOn: sorts range of aggregates by member name(s)

via Digitalmars-d digitalmars-d at puremagic.com
Wed Nov 5 03:18:55 PST 2014


On Wednesday, 5 November 2014 at 00:34:54 UTC, Meta wrote:
> On Wednesday, 5 November 2014 at 00:32:32 UTC, Nordlöw wrote:
>> Has there been any proposals to add a sort-wrapper, say sortBy,
>>
>> in cases such as
>>
>>    struct X { double x, y, z; }
>>    auto r = new X[3];
>>
>> used as
>>
>>    r.sortBy!("x", "y")
>>
>> sorting r by value of "x" then "y".
>>
>> If not and anybody is interest I could write one and make PR 
>> in std.algorithm.
>
> I think you're looking for multiSort.
>
> http://dlang.org/phobos/std_algorithm.html#.multiSort

That's not the same, it requires to specify a comparison 
function. Nordlöw wants to specify an attribute.

This could also be an arbitrary expression, of course:

     r.sortBy!"x*x + y*y + z*z"

The above could be implemented using `with` and 
`std.functional.unaryFun`. Alternatively, a lambda could be used:

     r.sortBy!(a => a.norm);


More information about the Digitalmars-d mailing list