First off, I know my title can be formulated better, but my math classes are so far gone I can\'t remember the correct words anymore..
I need to do something like this (
With LINQ:
int dotProduct = digits1.Zip(digits2, (d1, d2) => d1 * d2)
.Sum();
Zip
will produce a streaming sequence containing the products of corresponding elements from both arrays, which is then summed into an integer with Sum
.
Note that this will not fail like it should when the arrays of unequal length, so you probably need to validate the input:
//null checks here
if(digits1.Length != digits2.Length)
throw new ArgumentException("...");
EDIT:
As Jeff M points out,Enumerable.Zip
was only added to the framework in .NET 4.0. In .NET 3.5, you can do this (the idea is only efficient for collections that expose fast indexers):
int dotProduct = Enumerable.Range(0, digits1.Length)
.Sum(i => digits1[i] * digits2[i]);
//from Jeff M's comment:
int dotProduct = digits1.Select((n, i) => n * digits2[i])
.Sum();