View source code Display the source code in std/range.d from which this page was generated on github. Improve this page Quickly fork, edit online, and submit a pull request for this page. Requires a signed-in GitHub account. This works well for small changes. If you'd like to make larger changes you may want to consider using local clone. Page wiki View or edit the community-maintained wiki page associated with this page.

std.range.lockstep - multiple declarations

Function lockstep

Iterate multiple ranges in lockstep using a foreach loop. If only a single range is passed in, the Lockstep aliases itself away. If the ranges are of different lengths and s == StoppingPolicy.shortest stop after the shortest range is empty. If the ranges are of different lengths and s == StoppingPolicy.requireSameLength, throw an exception. s may not be StoppingPolicy.longest, and passing this will throw an exception.

By default StoppingPolicy is set to StoppingPolicy.shortest.

Lockstep also supports iterating with an index variable:

foreach (index, a, b; lockstep(arr1, arr2))
{
    writefln("Index %s:  a = %s, b = %s", index, a, b);
}

Prototypes

Lockstep!Ranges lockstep(Ranges...)(
  Ranges ranges
)
if (allSatisfy!(isInputRange, Ranges));

Lockstep!Ranges lockstep(Ranges...)(
  Ranges ranges,
  StoppingPolicy s
)
if (allSatisfy!(isInputRange, Ranges));

Example

auto arr1 = [1,2,3,4,5];
auto arr2 = [6,7,8,9,10];

foreach (ref a, ref b; lockstep(arr1, arr2))
{
    a += b;
}

assert(arr1 == [7,9,11,13,15]);

Struct Lockstep

Iterate multiple ranges in lockstep using a foreach loop. If only a single range is passed in, the Lockstep aliases itself away. If the ranges are of different lengths and s == StoppingPolicy.shortest stop after the shortest range is empty. If the ranges are of different lengths and s == StoppingPolicy.requireSameLength, throw an exception. s may not be StoppingPolicy.longest, and passing this will throw an exception.

By default StoppingPolicy is set to StoppingPolicy.shortest.

Lockstep also supports iterating with an index variable:

foreach (index, a, b; lockstep(arr1, arr2))
{
    writefln("Index %s:  a = %s, b = %s", index, a, b);
}

Example

auto arr1 = [1,2,3,4,5];
auto arr2 = [6,7,8,9,10];

foreach (ref a, ref b; lockstep(arr1, arr2))
{
    a += b;
}

assert(arr1 == [7,9,11,13,15]);

Authors

Andrei Alexandrescu, David Simcha, and Jonathan M Davis. Credit for some of the ideas in building this module goes to Leonardo Maffi.

License

Boost License 1.0.

Comments