146 votes

Comment additionner un tableau d'entiers en C#

Existe-t-il un mejor plus court que l'itération sur le tableau ?

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

clarification :

Un meilleur primaire signifie un code plus propre, mais les conseils sur l'amélioration des performances sont également les bienvenus. (Comme déjà mentionné : diviser de grands tableaux).


Ce n'est pas comme si je cherchais à améliorer les performances - je me demandais simplement si ce type d'amélioration de la performance n'était pas possible. sucre syntaxique n'était pas déjà disponible : "Il y a String.Join - et pourquoi pas int[] ?".

248voto

Tomas Vana Points 5686

Pour autant que vous puissiez utiliser .NET 3.5 (ou une version plus récente) et LINQ, essayez

int sum = arr.Sum();

Échantillon

int[] arr = new int[] { 1, 2, 3 };
int sum = arr.Sum();

// output = 6
Console.WriteLine(sum);

70voto

Ahmad Mageed Points 44495

Oui, il y en a un. Avec .NET 3.5 :

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

Si vous n'utilisez pas .NET 3.5, vous pouvez le faire :

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

23voto

Christopher Points 1684

Avec LINQ :

arr.Sum()

6voto

ja72 Points 9417

Une autre solution consiste à utiliser la fonction Aggregate() méthode d'extension.

var sum = arr.Aggregate((temp, x) => temp+x);

5voto

unholysampler Points 9454

Cela dépend de la définition que vous donnez à l'expression "mieux". Si vous voulez que le code soit plus propre, vous pouvez utiliser .Sum() comme indiqué dans d'autres réponses. Si vous voulez que l'opération se déroule rapidement et que vous avez un grand tableau, vous pouvez la rendre parallèle en la décomposant en sous-sommes, puis en additionnant les résultats.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X