Jonathan M Davis:

In addition, I would point out that sequence.dup.sort is using the built-in sort for arrays rather than std.algorithm.sort (you have to have the parens when calling sort on array, or it'll use the built-in one), and the built-in sort for arrays is not only buggy, but it's going to be deprecated, so I wouldn't advise using it. And yes, the means that you'll have to have a random-access range, meaning that you'll need to convert your string to dchar[], but at least then you'll get a sort that works and isn't going to be removed from the language (IIRC, the built-in sort doesn't sort Unicode properly anyway). If you know that you only have ASCII characters, then you can use ubyte[] instead, but char[] isn't going to work, since it's not a random-access range.

I'd like dmd to give a deprecation warning when you use a built-in sort.

And regarding sorting ASCII chars, it's a common need. I usually do it this way (if the input array of chars is mutable the code could spare the dup):

string s = "test";
string t = cast(string)(s.dup.representation.sort().release);

See also:
https://d.puremagic.com/issues/show_bug.cgi?id=10162

Bye,
bearophile

Reply via email to