On Fri, 21 Feb 2014 10:02:43 +0000, Regan Heath wrote: > On Thu, 20 Feb 2014 16:30:42 -0000, Justin Whear > <jus...@economicmodeling.com> wrote: > >> On Thu, 20 Feb 2014 13:04:55 +0000, w0rp wrote: >>> >>> More importantly, this gets in the way of behaviour which may be >>> desirable later, foreach being able to unpack tuples from ranges. >>> I would like if it was possible to return Tuple!(A, B) from front() >>> and write foreach(a, b; range) to interate through those thing, >>> unpacking the values with an alias, so this... >>> >>> foreach(a, b; range) { >>> } >>> >>> ... could rewrite to roughly this. (There may be a better way.) >>> >>> foreach(_someInternalName; range) { >>> alias a = _someInternalName[0]; >>> alias b = _someInternalName[1]; >>> } >> >> Tuple unpacking already works in foreach. This code has compiled since >> at least 2.063.2: >> >> import std.stdio; >> import std.range; >> void main(string[] args) >> { >> auto tuples = ["a", "b", "c"].zip(iota(0, 3)); >> >> // unpack the string into `s`, the integer into `i` >> foreach (s, i; tuples) >> writeln(s, ", ", i); >> } > > Does this work for more than 2 values? Can the first value be something > other than an integer? > > R
Yes to both questions. In the following example I use a four element tuple, the first element of which is a string: import std.stdio; import std.range; void main(string[] args) { auto tuples = ["a", "b", "c"].zip(iota(0, 3), [1.2, 2.3, 3.4], ['x', 'y', 'z']); foreach (s, i, f, c; tuples) writeln(s, ", ", i, ", ", f, ", ", c); } Compiles with dmd 2.063.2