Why std.algorithm.sort can't be applied to char[]?

monarch_dodra via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Thu May 15 08:37:07 PDT 2014


On Thursday, 15 May 2014 at 13:26:45 UTC, Steven Schveighoffer
wrote:
> On Wed, 14 May 2014 05:13:42 -0400, Jonathan M Davis via 
> Digitalmars-d-learn <digitalmars-d-learn at puremagic.com> wrote:
>
>> On Wed, 14 May 2014 08:27:45 +0000
>> monarch_dodra via Digitalmars-d-learn
>> <digitalmars-d-learn at puremagic.com> wrote:
>>> As a matter of fact, the built in "sort" property does it.
>>>
>>> void main()
>>> {
>>>     char[] s = "éöeèûà".dup;
>>>     s.sort;
>>>     writeln(s);
>>> }
>>> //prints:
>>> eàèéöû
>>
>> I'm surprised. I thought that one of Bearophile's favorite 
>> complaints was that
>> it didn't sort unicode properly (and hence one of the reasons 
>> that it should
>> be removed). Regardless, I do think that it should be removed.
>
> I can't believe this worked. I want to say that it's a freak 
> accident for that set of characters. Looking in druntime, I 
> don't see where the special case is.
>
> -Steve

Must be a hell of a freak accident ;)

      auto s = "é東öe京ûタèワà".dup;
      writeln(s.sort);

=> eàèéöûタワ京東

It's in rt/adi.d

extern (C) char[] _adSortChar(char[] a)

It's basically: string=>dstring=>sort=>dstring=>string.



BTW, the built in reverse also works with char[], and so does 
std.algorithm.reverse (and it does it pretty cleverly too, might 
I say).

As far as I'm concerned, if we *can* do it in n.log(n), and 
somebody provides the implementation, then there is no reason to 
not offer dchar sorting for char[]/wchar.


More information about the Digitalmars-d-learn mailing list