www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Multiple range enumeration

reply puming <zhaopuming gmail.com> writes:
Hi,

If I have multiple ranges, say:

auto a = [1, 2, 3];
auto b = ["a", "b", "c"];
auto c = ["x", "y", "z"];

I'd like a composition range that enumerate all combinations of 
these ranges,
having the same effect as a nested foreach loop:

foreach (i; a) {
   foreach (j; b) {
     foreach (k; c) {
        writlen(i, j, k);
     }
   }
}

Is there such a generic function in std lib?
Nov 10 2015
parent reply cym13 <cpicard openmailbox.org> writes:
On Wednesday, 11 November 2015 at 02:38:19 UTC, puming wrote:
 Hi,

 If I have multiple ranges, say:

 auto a = [1, 2, 3];
 auto b = ["a", "b", "c"];
 auto c = ["x", "y", "z"];

 I'd like a composition range that enumerate all combinations of 
 these ranges,
 having the same effect as a nested foreach loop:

 foreach (i; a) {
   foreach (j; b) {
     foreach (k; c) {
        writlen(i, j, k);
     }
   }
 }

 Is there such a generic function in std lib?
http://dlang.org/phobos/std_algorithm_setops.html#.cartesianProduct ?
Nov 10 2015
parent puming <zhaopuming gmail.com> writes:
On Wednesday, 11 November 2015 at 02:55:25 UTC, cym13 wrote:
 On Wednesday, 11 November 2015 at 02:38:19 UTC, puming wrote:
 Hi,

 If I have multiple ranges, say:

 auto a = [1, 2, 3];
 auto b = ["a", "b", "c"];
 auto c = ["x", "y", "z"];

 I'd like a composition range that enumerate all combinations 
 of these ranges,
 having the same effect as a nested foreach loop:

 foreach (i; a) {
   foreach (j; b) {
     foreach (k; c) {
        writlen(i, j, k);
     }
   }
 }

 Is there such a generic function in std lib?
http://dlang.org/phobos/std_algorithm_setops.html#.cartesianProduct ?
Thanks :-)
Nov 10 2015