Sort using Uniform call syntax

Ali Çehreli via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Mon Mar 14 11:27:30 PDT 2016


On 03/14/2016 06:56 AM, Jonathan M Davis via Digitalmars-d-learn wrote:
> On Monday, March 14, 2016 04:14:26 Ali Çehreli via Digitalmars-d-learn wrote:
>> On 03/14/2016 04:01 AM, Jerry wrote:
>>   > I have a small problem with using UCS when sorting arrays. This pops a
>>   > warning telling me to use the algorithm sort instead of the property
>>   > sort. Which I understand why it works that way. However that means I can
>>   > not have syntactic sugar. So is there any way around this or do I just
>>   > have to live with it?
>>
>> Two options:
>>
>> a) Use parentheses after sort:
>>
>>       arr.sort()
>>
>> b) Import sort() under a different name:
>>
>> import std.algorithm: algsort = sort;
>>
>>       arr.algsort
>
> Yep. The sort property on arrays will likely go away eventually, but until
> it does, those are your options. But at least now it warns you. Previously,
> it just silently used the sort property, which does the wrong thing for
> arrays of char or wchar.
>
> - Jonathan M Davis

Do you mean property sort would sort individual chars? However, the 
following program indicates that it may have been fixed (i.e. made 
Unicode-aware):

import std.stdio;

void main() {
     auto arr = "çöüabc".dup;
     arr.sort;

     // (Not correct for a particular writing system but
     // that's beyond the point. It's still a correct string.)
     assert(arr == "abcçöü");

     foreach (c; arr) {
         writefln("%02x", c);
     }
}

Prints:

61
62
63
c3 <- Out of order
a7 <- etc.
c3
b6
c3
bc

Perhaps, this was an independent change? More likely I've misunderstood 
you. :)

Ali



More information about the Digitalmars-d-learn mailing list