countUntil to print all the index of a given string.

Jonathan M Davis newsgroup.d at jmdavisprog.com
Tue Feb 20 08:50:27 UTC 2018


On Tuesday, February 20, 2018 08:44:37 aberba via Digitalmars-d-learn wrote:
> On Sunday, 18 February 2018 at 15:23:14 UTC, Cym13 wrote:
> > On Sunday, 18 February 2018 at 14:48:59 UTC, Cym13 wrote:
> >> [...]
> >
> > Just thought of a much better/simpler solution for that last
> > case that also doesn't force you to read all data (which might
> >
> > be impossible when dealing with infinite ranges):
> >     import std.range;
> >     import std.algorithm;
> >
> >     a[]
> >
> >      .enumerate                       // get tuples (index,
> >
> > value)
> >
> >      .filter!(t => t[1] == "Test2")   // keep only if value ==
> >
> > "Test2"
> >
> >      .map!(t => t[0])                 // keep only the index
> >
> > part
> >
> >      .writeln;
> >
> > Completely lazy.
>
> How does one detect an operation as lazy or not?  Is the some
> compile-time or runtime check for that?
>
> My guess is by referring to the docs function signature.

You have to read the docs or read the source code, though in general,
functions that return a range type that wraps the original range tend to be
lazy, whereas if a function returns the original range type or an array,
then it's clearly not lazy.

- Jonathan M Davis



More information about the Digitalmars-d-learn mailing list