On Wednesday, 14 May 2014 at 08:27:46 UTC, monarch_dodra wrote:
On Monday, 12 May 2014 at 18:44:22 UTC, Jonathan M Davis via Digitalmars-d-learn wrote:
Sure, you can cast char[] to ubyte[] and sort that if you know that the array only holds pure ASCII. In fact, you can use std.string.representation to do it
- e.g.

auto ascii = str.representation;

and if str were mutable, then you could sort it. But that will only work if the string only contains ASCII characters. Regardless, he wanted to know why he couldn't sort char[], and I explained why - all strings are treated as ranges of dchar, making it so that if their element type is char or wchar, so
they're not random access and thus can't be sorted.

Arguably, a smart enough implementation should know how to sort a "char[]", while still preserving codepoint integrity.

As a matter of fact, the built in "sort" property does it.

void main()
{
    char[] s = "éöeèûà".dup;
    s.sort;
    writeln(s);
}
//prints:
eàèéöû

Why would anyone ever want to sort code-points?

They might want to sort graphemes, but that's difficult to do in-place (needs O(n) memory, I think...). If out-of-place is good enough

someStr.byGrapheme.array.sort();

Reply via email to