One liner for creating an array filled by a factory method
Mengu
mengukagan at gmail.com
Sat Dec 23 12:54:32 UTC 2017
On Saturday, 23 December 2017 at 08:57:18 UTC, kerdemdemir wrote:
> On Friday, 22 December 2017 at 23:33:55 UTC, Mengu wrote:
>> On Thursday, 21 December 2017 at 21:11:58 UTC, Steven
>> Schveighoffer wrote:
>>> On 12/21/17 4:00 PM, kerdemdemir wrote:
>>>> I have a case like :
>>>>
>>>> http://rextester.com/NFS28102
>>>>
>>>> I have a factory method, I am creating some instances given
>>>> some enums.
>>>> My question is about :
>>>>
>>>>
>>>> void PushIntoVector( BaseEnum[] baseEnumList )
>>>> {
>>>> Base[] baseList;
>>>> foreach ( tempEnum; baseEnumList )
>>>> {
>>>> baseList ~= Factory(tempEnum);
>>>> }
>>>> }
>>>>
>>>> I don't want to use "foreach" loop. Is there any cool std
>>>> function that I can call ?
>>>>
>>>> Something like baseEnumList.CoolStdFunc!( a=> Factory(a)
>>>> )(baseList);
>>>>
>>>
>>> https://dlang.org/phobos/std_algorithm_iteration.html#map
>>>
>>> -Steve
>>
>> so basically it becomes:
>>
>> Base[] baseList = baseEnumList.map!(el => Factory(el));
>>
>> there's also a parallel version of map [0] if you ever need to
>> map the list concurrently.
>>
>> [0] https://dlang.org/phobos/std_parallelism.html#.TaskPool.map
>
> Yeah that was very easy and I used to use map for this purposed
> a lot already. I don't know why I get confused. Thanks guys for
> correction. I began to think like map could transform but it
> can't create vector of elements and this confused me.
it totally depends on the type of resulting element. if you
expect Base[], then your map should transform your range / array
elements into a Base.
import std.range, std.algorithm;
auto a = iota(1, 10);
int[] b = a.map!(el => el + 1).array;
int[][] c = a.map!(el => [el, el + 1]).array;
writeln(b);
writeln(c);
More information about the Digitalmars-d-learn
mailing list