Chaining a dynamic number of Ranges
Nathan M. Swan
nathanmswan at gmail.com
Sat Jul 21 10:00:01 PDT 2012
On Saturday, 21 July 2012 at 16:42:50 UTC, Enerqi wrote:
> Hello
>
> I'm playing around with my first D program and can't figure out
> a way to chain a dynamic number of ranges. In this example I'm
> trying to chain a two dimensional array into effectively a one
> dimensional array, so I can later sort it as one sequence.
>
>
> --------
> import std.algorithm;
> import std.range;
>
> // n is determined at runtime
> uint[][] arrays = new uint[][n];
> foreach(ref a; arrays)
> {
> a = new uint[10];
> copy(iota(10), a);
> }
>
> auto c = chain(arrays[0], arrays[1]);
> foreach(a; arr[2..$])
> {
> c = chain(c, a);
> }
> --------
>
> Gives a compile error:
> Error: cannot implicitly convert expression (chain(c,a)) of
> type Result to Result
>
> any ideas?
>
> Thanks.
The problem is that the first auto c is a chaining of an array
and array, and chain(c, a) is a chaining of a chain of arrays and
an array.
The way to do this is std.algorithm.joiner:
auto c = joiner(arrays, []);
Forgive me if I'm wrong (untested),
NMS
More information about the Digitalmars-d-learn
mailing list