2 Stimmen

Schnelle Summe von Werten in einem mehrdimensionalen Array (C#)

Bei einem 1D-Array kann ich die Summenmethode verwenden, um die Summe aller Werte zu erhalten.

int[] array = {6,3,1};
Console.WriteLine(array.Sum());

Bei einem mehrdimensionalen Array (in meinem Fall 3D) ist dies nicht möglich. Offensichtlich könnte ich alle foreach auf sie gehen, aber das scheint langwierig und ich vermute, es wird schlecht durchführen.

Gibt es eine Möglichkeit, das Feld zu glätten? Oder eine nette Möglichkeit, nur die Summe zu erhalten, die ich nicht gesehen habe?

8voto

Andrey Punkte 57704

Summe macht genau foreach . Es steckt keine Magie dahinter. Wenn Sie so leistungshungrig sind, verwenden Sie for anstelle von foreach . Sie können dies auch parallel tun, dieser Vorgang kann leicht parallelisiert werden.

4voto

albertjan Punkte 7531

Das wird den Zweck erfüllen.

var i = array.SelectMany(j => j).Sum()

Sie könnten dies in .net 4 wie folgt parallelisieren

var i = array.AsParallel().SelectMany(k => k).Sum();

2voto

tanascius Punkte 51555

Warum sollte ein foreach schlecht abschneiden? Sie müssen jeden Wert mindestens einmal lesen, um die Summe zu berechnen. Das lässt sich nicht umgehen (natürlich unter der Annahme "zufälliger" Werte). Vielleicht gibt es also einen schöneren Weg, aber keinen leistungsfähigeren (in Bezug auf die Big O ).

2voto

Yuriy Faktorovich Punkte 64670

Wenn Sie ein gezacktes Array haben und sauberen Code wünschen, können Sie

int[][] array = { new []{ 6, 3, 1 }, new []{ 6, 3, 1 } };
Console.WriteLine(array.Sum(i => i.Sum()));

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X