繁体   English   中英

c# 列表中值的总和

[英]c# Sum of the values from list


   int [] myList = {7, 11, 17, 5, 18, 6};

   int sum=0;

   a1 = value1(7);
   a2 = value1(7) + value2(11);
   a3 = value1(7) + value2(11) + value3(17);
   ....
   ....
   ....
   a6 = value1(7) + value2(11) + value3(17) + ... + value6(6);

   return sum = a1 + a2 + a3 + a4 + a5 + a6;
       

例子:

我有一个数组 --> [7, 11, 17, 5, 18, 6]

我必须为sum赋值。

sum必须是 =

  7 +
  7 + 11 +
  7 + 11 + 17 +
  7 + 11 + 17 + 5 +
  7 + 11 + 17 + 5 + 18 +
  7 + 11 + 17 + 5 + 18 + 6 =

  (7*6 + 11*5 + 17*4 + 5*3 + 18*2 + 6) = 222

(注意,我不想要数组项的简单总和。)如何在 c# 上编码?

好吧,你有公式:

 sum = item[0] * Length + 
       item[1] * (Length - 1) + 
       ...
       item[i] * (Length - i) +
       ...
       item[Length - 1] * 1

为了实现它,您可以使用旧for循环:

int sum = 0;

for (int i = 0; i < myList.Length; ++i)
  sum += myList[i] * (myList.Length - i);

或 Linq:

int sum = myList
  .Select((item, i) => item * (myList.Length - i))
  .Sum(); 

编辑:如果您想概括我们不知道LengthCountIEnuerable<int>的解决方案,您可以放置foreach循环:

int sum = 0;
int prior = 0;

// Now myList can be int[] (array), List<int> (list)...
foreach (int item in myList) 
  sum += (prior += item);

您可以使用linq

var totalLength = myList.Length;
var totalSum = myList.Select((m, index) => m * (totalLength  - index)).Sum();

另一种方式:

int sum = 0;
var cummulativeSum = myList.Select(m => { sum = sum + m; return sum;});
totalSum = cummulativeSum.Sum();

检查小提琴: https://dotnetfiddle.net/Q6s4OT

using System.Linq; int[] myList = {7, 11, 17, 5, 18, 6}; var sum = myList.Select((e, i) => e * (myList.Length - i)).Sum();
int [] myList = {7,11,17,5,18,6};

var sum = 0;
for (var i = 0; i < myList.Length; i++)
{
    sum += myList[i] * (myList.Length - i);
}
Console.WriteLine(sum);
        int[] myList = { 7, 11, 17, 5, 18, 6 };
        int sum = 0;

        for (int i=1; i<= myList.Length; i++)
        {
            Console.WriteLine($"{(myList.Length - i + 1)}*{myList[i-1]}");
            sum += (myList.Length-i+1) * myList[i-1];
        }
        Console.WriteLine($"sum: {sum}");

或者

        using System.Linq;

        int[] myList = { 7, 11, 17, 5, 18, 6 };

        int j = myList.Length;
        var sum = myList.Aggregate(0, (total, x) => total+=x*j--);
        Console.WriteLine($"sum: {sum}");
using System;
using System.Linq;

var myList = new int[] { 7, 11, 17, 5, 18, 6 };

var sum = myList.Reverse()
    .Select((v, i) => v * (i + 1))
    .Sum();

Console.WriteLine(sum);

PS 更新了 .NET 小提琴

有很多方法可以解决这个问题,这里有一个:

int [] myList = {7, 11, 17, 5, 18, 6};
var result = myList.SelectMany((x, i) => myList.GetRange(0, i + 1)).Sum();

如果我把它分解成小块

int [] myList = {7, 11, 17, 5, 18, 6};

var grouped = myList.Select((x, i) => myList.GetRange(0, i + 1));
// grouped = {{7},{7,11},{7,11,17},{7,11,17,5},{7,11,17,5,18},{7,11,17,5,18,6}}

var flattened = grouped.SelectMany(x => x);
// flattened = {7,7,11,7,11,17,7,11,17,5,7,11,17,5,18,7,11,17,5,18,6}

var sum = flattened.Sum();
// sum = 222

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM