digitalmars.D.bugs - [Issue 9841] New: std.algorithm.iFilter
- d-bugmail puremagic.com (43/43) Mar 30 2013 http://d.puremagic.com/issues/show_bug.cgi?id=9841
http://d.puremagic.com/issues/show_bug.cgi?id=9841 Summary: std.algorithm.iFilter Product: D Version: D2 Platform: All OS/Version: All Status: NEW Severity: enhancement Priority: P2 Component: Phobos AssignedTo: nobody puremagic.com ReportedBy: bearophile_hugs eml.cc This is a little "challenge" on streams, LINQ, etc: Challenge 2: Indexed Filtering Find all the names in the array "names" where the length of the name is less than or equal to the index of the element + 1. With LINQ: string[] names = { "Sam", "Pamela", "Dave", "Pascal", "Erik" }; var nameList = names.Where((c, index) => c.Length <= index + 1).ToList(); In D: auto names2 = ["Sam","Pamela", "Dave", "Pascal", "Erik"]; auto nameRange = iota(size_t.max) .zip(names2) .filter!q{ a[1].length <= a[0] } .map!q{ a[1] }; nameRange.writeln; Using enumerate() I have suggested in Issue 5550 the D code improves: auto nameRange2 = names2 .enumerate .filter!q{ a[1].length <= a[0] } .map!q{ a[1] }; nameRange2.writeln; But in this case an iFilter is better than using enumerate+filter+map. In iFilter the filtering function is supplied by an index+item 2-tuple, so the D code becomes: auto nameRange2 = names2.iFilter!q{ a.length <= i }; So I suggest to add a iFilter or ifilter to Phobos. An alternative name is filterWithIndex, but iFilter is better because it reminds us that the index is the fist items of the 2-tuple. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Mar 30 2013