代码之家  ›  专栏  ›  技术社区  ›  Christoph

聚合中的迭代器(linq)?

  •  5
  • Christoph  · 技术社区  · 11 年前

    假设我有一个像这样的小整数数组:

    {10,20,30}
    

    现在,对于该数组中的项,我想应用以下公式:

    10^(arrayLenght-1) + 20^{arrayLenght-2) + 30^{arrayLenght-3}
    

    有没有一种方法可以通过使用linq-aggregate方法来实现这一点,尽管你需要某种迭代器,但当我正确地看到这一点时,aggregate并没有实现?

    3 回复  |  直到 11 年前
        1
  •  14
  •   Magnus Grindal Bakken    11 年前

    以下是我的操作方法:

    array.Select((num, index) => Math.Pow(num, items.Length - index - 1)).Sum();
    
        2
  •  4
  •   Kamil Budziewski    11 年前

    试试这个:

    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)));
    
        3
  •  0
  •   AlanT    11 年前

    您可以尝试对选择的结果求和,而不是使用聚合

    result = values.Select((t, index) => Math.Pow(t, (values.Length - (index + 1)))).Sum();