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();