[phobos] UTF-8 string slicing

Masahiro Nakagawa repeatedly at gmail.com
Fri Aug 19 23:50:37 PDT 2011


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.


More information about the phobos mailing list