range simple toy problem
Alex
sascha.orlov at gmail.com
Fri Jun 1 18:21:07 UTC 2018
On Friday, 1 June 2018 at 17:00:45 UTC, Xiaoxi wrote:
> import std.range;
> import std.algorithm;
> import std.string;
> import std.stdio;
>
> void main()
> {
> auto s = "1 2 3 4 5 6 7 8 9";
> auto iter = s.split(" ").drop(2);
>
> // How to find the unconsumed/not-split part of s here?
> // i.e. "3 4 5 6 7 8 9" NOT ["3", "4", "5", "6", "7", "8",
> "9"]
> // s[??? .. $] <- what goes here?
> }
>
> split is just an example, it's a generic question if you chain
> multiple lazy functions and then consume a part of the data...
> how do you know how to slice the original buffer to point to
> the unconsumed data? Imagine the chain could be quite long
>
> s.one.two.three.four.five.six.seven()
>
> You don't really want to lazily add the inverse of all the
> functions and they might even be destructive so it might not be
> possible in all cases.
>
Split is already destructive, as you loose the whitespaces. In
this special case, maybe by
iter.join(" ");
https://dlang.org/library/std/array/join.html
In case the the separator can't be known in advance, I would
choose to store it somehow... Maybe by
https://dlang.org/library/std/algorithm/searching/find_split.html
?
More information about the Digitalmars-d-learn
mailing list