www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - One liner for creating an array filled by a factory method

reply kerdemdemir <kerdemdemir gmail.com> writes:
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);

Erdem
Dec 21 2017
parent reply Steven Schveighoffer <schveiguy yahoo.com> writes:
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
Dec 21 2017
parent reply Mengu <mengukagan gmail.com> writes:
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
Dec 22 2017
parent reply kerdemdemir <kerdemdemir gmail.com> writes:
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.
Dec 23 2017
parent Mengu <mengukagan gmail.com> writes:
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);
Dec 23 2017