Search
View source code
Display the source code in std/algorithm/iteration.d from which this page was generated on github.
Report a bug
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.

# Template `std.algorithm.iteration.map`

`auto map(Range)(Range r) if (isInputRange!(Unqual!Range));`

Implements the homonym function (also known as `transform`) present in many languages of functional flavor. The call `map!(fun)(range)` returns a range of which elements are obtained by applying `fun(a)` left to right for all elements `a` in `range`. The original ranges are not changed. Evaluation is done lazily.

## Arguments

``` template map(fun...); ```

### Functions

Function name Description
map

### Parameters

NameDescription
fun one or more transformation functions
r an input range

### Returns

a range with each fun applied to all the elements. If there is more than one fun, the element type will be `Tuple` containing one element for each fun.

### Example

``````import std.algorithm.comparison : equal;
import std.range : chain;
int[] arr1 = [ 1, 2, 3, 4 ];
int[] arr2 = [ 5, 6 ];
auto squares = map!(a => a * a)(chain(arr1, arr2));
assert(equal(squares, [ 1, 4, 9, 16, 25, 36 ]));
``````

### Example

Multiple functions can be passed to `map`. In that case, the element type of `map` is a tuple containing one element for each function.

``````auto sums = [2, 4, 6, 8];
auto products = [1, 4, 9, 16];

size_t i = 0;
foreach (result; [ 1, 2, 3, 4 ].map!("a + a", "a * a"))
{
writeln(result[0]); // sums[i]
writeln(result[1]); // products[i]
++i;
}
``````

### Example

You may alias `map` with some function(s) to a symbol and use it separately:

``````import std.algorithm.comparison : equal;
import std.conv : to;

alias stringize = map!(to!string);
assert(equal(stringize([ 1, 2, 3, 4 ]), [ "1", "2", "3", "4" ]));
``````