Ich habe eine ziemlich spezialisierte Abfrage, die ich in C# herausfinden möchte.Mittelwertbildung von Elementen nach Array-Indizes in LINQ nach GroupBy()
Ich habe eine Klasse:
class TimeValues
{
DateTime When;
ImmutableArray<float> Values;
}
Dieser Bericht eine Reihe von Sensoren zu einem bestimmten Zeitpunkt darstellt. Was ich in einer ImmutableArray<TimeValues> SomeArray
nutze, das stellt eine Reihe von Berichten oft bis auf die Sekunde dar.
Das Problem, das ich versuche zu lösen, ist, wie nach 30-Sekunden-Intervallen zu gruppieren, und die Berichte jedes Sensors einzeln zu berechnen.
So zum Beispiel, wenn ich zwei Berichte haben:
s1 s2 s3
1:20 10 20 30
1:21 30 50 70
und wir gehen davon aus, dass T1 und T2 innerhalb von 30 Sekunden voneinander sind, möchte ich die Operation zu folgenden Ergebnissen führen:
s1 s2 s3
1:00 avg(10,30) avg(20,50) avg(30,70)
ich habe mit etwas begonnen, wie zum Beispiel:
SomeArray.GroupBy(k => k.When.Second >= 30
? k.When.AddSeconds(-k.When.Second + 30)
: k.When.AddSeconds(-k.When.Second), k => k.Values)
.Select(group => new TimeValues(group.Key, ...))
Es ist die letzte Zeile, die ich nicht ganz Figur ou t. Ein Punkt, der betont werden muss, ist, dass die Reihenfolge der gemittelten Werte beibehalten werden muss, da sie mit den berichtenden Sensoren übereinstimmen muss. Dies ist das erste Mal, dass ich in LINQ eine Gruppe verwende, und wahrscheinlich eine der komplizierteren.
Mögliches Duplikat von https://stackoverflow.com/questions/24373866/average-int-array-elements-with-a-groupby –