Calculating/Averaging over a struct value
    Jesse Phillips 
    Jessekphillips+D at gmail.com
       
    Wed Mar 21 13:13:36 PDT 2012
    
    
  
On Wednesday, 21 March 2012 at 17:02:05 UTC, Brian Brady wrote:
> As per the commented section, I want to be able to dynamically 
> figure out,
> which member of the struct to average across, for all the 
> structs in the array.
Timon has given you an good example to get D to generate some 
code for you. I would also point out that combining your if block 
or even Timon's solution with a template:
double average(string param)(Data[] x)
{
  static if (!isNumeric!(typeof(mixin("Data."~param))))
    return -1;
  else
  {
   //auto average = reduce!("a."~param~" + b."~param)(x)/x.length;
   typeof(return) average = 0;
   foreach(v; x) {
	  mixin("average += v."~param~";");
   }
   return average/x.length;
  }
}
Note, I commented out reduce as it uses the array type instead of 
the calculation type. I think I'll file than as a bug. Also the 
reduce version would not give you a double back even if it did 
work, need a cast in there.
Now calculating the parameter is just
auto ans = average!"d1"(x);
    
    
More information about the Digitalmars-d-learn
mailing list