假设我有一个像这样的小整数数组:
{10,20,30}
字符串现在,对于该数组的项目,我想应用以下公式:
10^(arrayLenght-1) + 20^{arrayLenght-2) + 30^{arrayLenght-3}
型有没有一种方法可以通过使用linq聚合方法来实现这一点,尽管你需要某种迭代器,当我看到这一点时,聚合不会实现?
ghhaqwfi1#
我会这么做
array.Select((num, index) => Math.Pow(num, items.Length - index - 1)).Sum();
字符串
ztyzrc3y2#
试试这个:
var a = new int[]{10, 20, 30}; int i = 0; a.Sum(x => Math.Pow(x, a.Length - ++i));
字符串它使用Sum方法,因为它在这里更准确。您还可以使用:用途:
Sum
var a = new int[]{10, 20, 30}; a.Select((x,i)=> Math.Pow(x,a.Length-(i+1)));
型
efzxgjgh3#
您可以尝试对选择的结果求和,而不是使用聚合
result = values.Select((t, index) => Math.Pow(t, (values.Length - (index + 1)))).Sum();
8fsztsew4#
给出的答案是解决这个问题的最佳选择,但是如果你需要一个公开迭代索引的聚合函数,你可以自己编写。
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; }
4条答案
按热度按时间ghhaqwfi1#
我会这么做
字符串
ztyzrc3y2#
试试这个:
字符串
它使用
Sum
方法,因为它在这里更准确。您还可以使用:用途:
型
efzxgjgh3#
您可以尝试对选择的结果求和,而不是使用聚合
字符串
8fsztsew4#
给出的答案是解决这个问题的最佳选择,但是如果你需要一个公开迭代索引的聚合函数,你可以自己编写。
字符串