[phobos] UTF-8 string slicing

Jonathan M Davis jmdavisProg at gmx.com
Sat Aug 20 00:49:43 PDT 2011


On Saturday, August 20, 2011 15:50:37 Masahiro Nakagawa wrote:
> On Sat, 20 Aug 2011 05:22:38 +0900, Jonathan M Davis <jmdavisProg at gmx.com>
> 
> wrote:
> > On Friday, August 19, 2011 11:42 Masahiro Nakagawa wrote:
> >> On Sat, 20 Aug 2011 02:24:41 +0900, unDEFER <undefer at gmail.com> wrote:
> >> 
> >> [snip]
> >> 
> >> > The fact which the next code
> >> > ----
> >> > writeln( arr.length );
> >> > arr.popFront();
> >> > writeln( arr.length );
> >> > ----
> >> > prints 9 after 10 for any array but for UTF-8 and UTF-16 strings
> >> > may
> >> > print as well 8 or lesser, seems too confusing for me.
> >> 
> >> You can use std.algorithm.count to count the number of elements.
> >> 
> >> assert([1,2,3].count() == 3);
> >> assert("abc".count() == 3);
> >> assert("あいう".count() == 3);
> > 
> > The correct function for getting the number of elements for a range is
> > std.ronge.walkLength. count will call its predicate (which defaults to
> > "true")
> > on every member of the range. walkLength, on the other hand, will call
> > the
> > range's length property if it has one (string and wstring don't have a
> > length
> > property as far as ranges are concerned, because they're ranges of
> > dchar, not
> > char or wchar) and simply iterates through the range, counting its
> > elements
> > otherwise. So, it will be more efficient to call walkLength, and that's
> > what
> > it's for. count is for counting the number of elements in the range
> > which
> > match its predicate, not for counting the number of elements in the
> > range.
> 
> Yes, I know.

Then I don't understand why you were suggesting that he use count rather than 
walkLength.

- Jonathan M Davis


More information about the phobos mailing list