On Sat, 20 Aug 2011 05:22:38 +0900, Jonathan M Davis <[email protected]> wrote:

On Friday, August 19, 2011 11:42 Masahiro Nakagawa wrote:
On Sat, 20 Aug 2011 02:24:41 +0900, unDEFER <[email protected]> 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.
_______________________________________________
phobos mailing list
[email protected]
http://lists.puremagic.com/mailman/listinfo/phobos

Reply via email to