Verwenden von LINQ zum Abrufen der Summe / des Durchschnitts einer Liste mit benutzerdefinierten Objekten

8

Ich habe eine Klasse:

%Vor%

Wieviele list<PointD> erhalten Sie, wenn Sie LINQ verwenden? Ein for Schleifenäquivalent wird etwa so aussehen:

%Vor%

Sie können nur eine integrierte LINQ-Funktion verwenden. Sie können keine Erweiterung definieren, die sich um diese Funktion kümmert.

Irgendeine Idee?

Bearbeiten: Natürlich können Sie zwei separate Sum Erweiterung-Methode zu Summe für X und Y-Komponente vor dem Zusammenführen verwenden. Aber das ist nicht was ich will. Was ich will, ist eine einzelne Abfrage / Methode, die den Job

erledigt     
Graviton 16.07.2009, 07:43
quelle

3 Antworten

13

Die Funktion Aggregate wäre hier praktisch.

%Vor%

Stellen Sie sicher, dass Sie den Operator / für die Typen PointD und int definiert haben, und dies sollte die Aufgabe erledigen.

Hinweis: Ich bin mir nicht ganz sicher, ob Sie die Summe oder den Durchschnitt hier haben möchten (Ihre Frage ist etwas mehrdeutig), aber ich habe Beispiele für beide hinzugefügt.

    
Noldorin 16.07.2009, 07:54
quelle
6

Sie müssen stattdessen die Methode Aggregate verwenden, damit Sie Ihre eigene Aggregationsfunktion bereitstellen können ( Sum ist nur ein praktischer Spezialfall dieser Methode). Etwas wie:

%Vor%

Ich weiß, dass Sie sagen, dass Sie keine zusätzlichen Methoden definieren möchten, aber wenn dies eine übliche Operation ist, würde ich geneigt sein, eine Erweiterungsmethode dafür zu schreiben, d. h.

%Vor%

Weil es viel lesbarer ist, schreiben zu können:

%Vor%     
Greg Beech 16.07.2009 07:54
quelle
0
%Vor%     
Ruben Bartelink 16.07.2009 07:58
quelle

Tags und Links