假设我有一个像这样的小整数数组:
{10,20,30}
现在对于该数组的项目,我想应用以下公式:
10^(arrayLenght-1) + 20^{arrayLenght-2) + 30^{arrayLenght-3}
有没有办法通过使用 linq 聚合方法来完成此任务,尽管您需要某种迭代器,但当我看到这一点时,该聚合并没有实现?
我会这样做:
array.Select((num, index) => Math.Pow(num, items.Length - index - 1)).Sum();
试试这个:
var a = new int[]{10, 20, 30};
int i = 0;
a.Sum(x => Math.Pow(x, a.Length - ++i));
它使用
Sum
方法,因为这里更准确。
您还可以使用:
var a = new int[]{10, 20, 30};
a.Select((x,i)=> Math.Pow(x,a.Length-(i+1)));
您可以尝试对选择的结果求和,而不是使用聚合
result = values.Select((t, index) => Math.Pow(t, (values.Length - (index + 1)))).Sum();
给出的答案最能解决这个问题,但是如果您需要一个公开迭代索引的聚合函数,您可以编写自己的答案。
public static TAccumulate Aggregate<TSource, TAccumulate>(
this IEnumerable<TSource> source,
TAccumulate seed,
Func<TAccumulate, TSource, int, TAccumulate> func)
{
if (source == null)
throw new ArgumentNullException(nameof(source));
if (func == null)
throw new ArgumentNullException(nameof(func));
var accumulate = seed;
var i = 0;
foreach (var item in source)
{
accumulate = func(accumulate, item, i);
i++;
}
return accumulate;
}