On Monday, March 12, 2012 16:04:37 Magnus Lie Hetland wrote: > On 2012-03-12 13:09:18 +0000, Dmitry Olshansky said: > > Mm it should perform sort on UTF-8 buffer? > > Humm -- dunno ;) The UTF-8-semantics of single characters sort of > slipped my mind :) > > > Tricky thing but worths an enhancement request. > > I'm just thinking an array of anything that can be compared should > probably be sort-able. But comparing individual UTF-8-bytes can be > weird, indeed. So, yeah. I guess the weirdness follows from the fact > that individual characters are considered UTF-8 :) > > > If it's ASCII then try: > > sort(a.representation) > > > > representation is in std.string IRC. > > The thing is, I'm using sort() in a template, and I just happen to use > char as the template parameter in a unit test. And since I have no > special UTF-8 values in there, my own sort() works just fine. (Although > maybe it shouldn't? ;)
The problem is that sort requires a random access range, and narrow string (string and wstring) aren't, because they're variable length encoded. I'm not sure that strings _can_ be efficiently sorted, because of that, but maybe there's a sorting algorthm that could do it reasonably efficiently, and we could special case sort for narrow strings to use that one, but it's a while since I messed with sorting algorithms, so I don't remember all of their characteristics off of the top of my head. Certainly, with how sort is currenly implemented, it can't handle any range which isn't a random access range. - Jonathan M Davis