sorting a mutable array of immutable objects

Jeff Thompson via Digitalmars-d digitalmars-d at puremagic.com
Wed Apr 20 06:27:03 PDT 2016


On Wednesday, 20 April 2016 at 12:34:28 UTC, Anonymouse wrote:
> On Wednesday, 20 April 2016 at 10:32:42 UTC, Jeff Thompson 
> wrote:
>> On Wednesday, 20 April 2016 at 09:54:13 UTC, Jeff Thompson 
>> wrote:
>>> I can create a mutable array of immutable objects, thanks to 
>>> the answers to my other question 
>>> https://forum.dlang.org/post/nf57f5$e6v$1@digitalmars.com .
>>>
>>> Now I want to sort the array.
>>
>> I found a solution, but I'm not sure it is the best way. 
>> Instead of overriding opCmp, class C just defines a static 
>> comparison to use with sort (which automatically works with 
>> Rebindable). Is there a way to do this where I don't need to 
>> specify C.isLess every time I sort?
>>
>> class C {
>>   this(int x) immutable { this.x = x; }
>>   static bool isLess(const C a, const C b) @safe pure nothrow 
>> { return a.x < b.x; }
>>   int x;
>> }
>>
>> void
>> main(string[] args)
>> {
>>   auto array = new Rebindable!(immutable(C))[2];
>>   array[0] = new immutable C(20);
>>   array[1] = new immutable C(10);
>>   sort!(C.isLess)(array);
>> }
>
> int opCmp(immutable Object o) immutable {}

Thanks for a better solution, but I never would have thought to 
try opCmp without "override" since I assumed that sort was 
looking for the opCmp defined by Object. So many 
counter-intuitive mysteries in D. That's why this forum is 
indipensable.


More information about the Digitalmars-d mailing list