How to map elements of a tuple?
Simen Kjærås
simen.kjaras at gmail.com
Wed Aug 22 11:07:57 UTC 2018
On Wednesday, 22 August 2018 at 10:36:32 UTC, Andrey wrote:
> Hello,
> Is there a template/function/mixin... in the library that I can
> use to map elements of a tuple?
>
>> object.foo(Mapper!myMapFunction(1, bool, "Qwerty",
>> EnumedColor.Red));
>
> where "Mapper" is this mapper and "myMapFunction" is a template
> function that I want to apply to each member in tuple.
>
> I know that there is std.algorithm.map but as I understand it
> is suitable only for arrays (types are the same).
I believe this should be what you're looking for:
import std.typecons;
auto map(alias fn, T...)(Tuple!T arg) {
import std.conv : text;
import std.range : iota;
import std.algorithm.iteration : joiner, map;
return mixin(text("tuple(",T.length.iota.map!(i =>
text("fn(arg[",i,"])")).joiner(", "),")"));
}
unittest {
import std.conv : to;
auto a = tuple(1,2,"").map!(a => a.to!string);
assert(a == tuple("1","2",""));
}
--
Simen
More information about the Digitalmars-d-learn
mailing list