Как суммировать массив целых чисел в C#


здесь лучше более короткий путь, чем итерация по массиву?

int[] arr = new int[] { 1, 2, 3 };
int sum = 0;
for (int i = 0; i < arr.Length; i++)
{
    sum += arr[i];
}

пояснение:

лучше основной означает более чистый код, но подсказки по повышению производительности также приветствуются. (Как уже упоминалось: разбиение больших массивов).


это не похоже на то, что я искал улучшения производительности убийцы - мне просто интересно, если это очень похоже синтаксический сахар еще не было доступно: "есть Строка.Присоединяйтесь - какого черта о int[]?".

8 77

8 ответов:

при условии, что вы можете использовать C# 3.5 и LINQ, попробуйте

int sum = arr.Sum();

Да есть. С .Net 3.5 с:

int sum = arr.Sum();
Console.WriteLine(sum);

Если вы не используете .NET 3.5, вы можете сделать это:

int sum = 0;
Array.ForEach(arr, delegate(int i) { sum += i; });
Console.WriteLine(sum);

С LINQ:

arr.Sum()

Это зависит от того, как вы определите лучше. Если вы хотите, чтобы код выглядел чище, вы можете использовать .Sum () как упоминалось в других ответах. Если вы хотите, чтобы операция выполнялась быстро, и у вас есть большой массив, вы можете сделать его параллельным, разбив его на sub sums, а затем суммировать результаты.

Если вы не предпочитаете LINQ, лучше использовать цикл foreach, чтобы избежать выхода из индекса.

int[] arr = new int[] { 1, 2, 3 };
int sum = 0;
foreach (var item in arr)
{
   sum += item;
}

использование foreach будет более коротким кодом, но, вероятно, выполните точно такие же шаги во время выполнения после того, как JIT-оптимизация распознает сравнение с длиной в управляющем выражении for-loop.

в одном из моих приложений я использовал :

public class ClassBlock
{
    public int[] p;
    public int Sum
    {
        get { int s = 0;  Array.ForEach(p, delegate (int i) { s += i; }); return s; }
    }
}

попробуйте этот код:

using System;

namespace Array
{
    class Program
    {
        static void Main()
        {
            int[] number = new int[] {5, 5, 6, 7};

            int sum = 0;
            for (int i = 0; i <number.Length; i++)
            {
                sum += number[i];
            }
            Console.WriteLine(sum);
        }
    }
} 

результат:

23