Ich versuche etwas zu erstellen, das einem Histogramm ähnelt. Ich versuche Eimer aus einem Array zu erstellen.Zentrieren von Bereichen um Null
Angenommen, ich habe ein zufälliges Array verdoppelt zwischen -10 und 10; Das ist sehr vereinfacht. Ich möchte dann einen Mittelpunkt angeben, in diesem Fall 0 und die Anzahl der Buckets.
Wenn ich 4 Eimer möchte, wäre die Division -10 bis -5, -5 bis 0, 0 bis 5 und 5 bis 10. Nicht so kompliziert richtig. Wenn ich jetzt die Min- und Max-Werte auf -12 und -9 und wie auf 4 Divisionen ändere, ist es komplizierter. Ich will entweder eine Teilung bei -3 und 3; es ist um 0 zentriert; oder eine bei -6 bis 0 und 0 bis 6
Es ist nicht so schwer, die Teilung Größe
= Math.Ceiling((Abs(Max) + Abs(Min))/Divisions)
Dann finden würden Sie haben grundsätzlich eine if-Anweisung, um zu bestimmen, ob Sie es zentriert auf 0 oder an einer Kante. Je nach Situation iterieren Sie dann entweder von 0 oder von DivisionSize/2. Sie dürfen nicht IMMER mit der angegebenen Anzahl von Divisionen enden, aber es wird in der Nähe sein. Dann durchlaufen Sie das Array und erhöhen die Anzahl der Bins.
Scheint dies eine gute Möglichkeit, dies zu tun? Diese Methode würde sicherlich funktionieren, aber es scheint nicht die eleganteste zu sein. Ich bin gespannt, ob die Erstellung der Bins und das Zählen aus der Liste in eleganter Weise in einer cleveren Klasse mit linq erledigt werden könnte.
So etwas wie die Behälter zu schaffen und dann jedes Fach eine Eigenschaft sein, die {get;}, dass returns list.Count(x=> x >= Lower && x < Upper).
Ich nehme an, Buckets wäre eine Liste, in die Sie indexieren könnten, wie Sie vorschlagen. Das macht Sinn. Ist das Aggregat nur ein .Sum(). Wo()? Sie erklären, wie der aggregierte Teil genauer arbeiten würde. Und danke für deine Antwort. –
Mark