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.
Function std.range.chain
Spans multiple ranges in sequence
. The function
takes any
number of ranges and returns a chain
Chain!(R1, R2,...)
object
. The
ranges may be different, but they must have the same element type. The
result is a range that offers the front
, popFront
, and empty
primitives. If all input ranges offer random access and length
, Chain
offers them as well.
If only
one range is offered to Chain
or
, the chain
Chain
type exits the picture by aliasing itself directly to that
range's type.
Prototype
auto chain(Ranges...)( Ranges rs ) if (Ranges.length > 0 && allSatisfy!(isInputRange, staticMap!(Unqual, Ranges)) && !is(CommonType!(staticMap!(ElementType, staticMap!(Unqual, Ranges))) == void));
Example
import std.algorithm : equal; int[] arr1 = [ 1, 2, 3, 4 ]; int[] arr2 = [ 5, 6 ]; int[] arr3 = [ 7 ]; auto s = chain(arr1, arr2, arr3); assert(s.length == 7); assert(s[5] == 6); assert(equal(s, [1, 2, 3, 4, 5, 6, 7][]));
Authors
Andrei Alexandrescu, David Simcha, and Jonathan M Davis. Credit for some of the ideas in building this module goes to Leonardo Maffi.