On Saturday, August 20, 2011 15:50:37 Masahiro Nakagawa wrote: > 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.
Then I don't understand why you were suggesting that he use count rather than walkLength. - Jonathan M Davis _______________________________________________ phobos mailing list [email protected] http://lists.puremagic.com/mailman/listinfo/phobos
