Вопрос не совсем понятно, но это звучит как то, что вы хотите, это новая точка P, где PX среднее из всех X координат точек в список и т. д., да?
Общий способ решить проблему, как это разбить его:
Сначала преобразуем список точек в четырех списков целых чисел.
var times = from p in points select p.Time;
var xs = from p in points select p.X;
... and so on ..
Или, если вы предпочитаете это обозначение:
var times = points.Select(p=>p.Time);
Теперь вы можете усреднить эти:
double averageTime = times.Average();
double averageX = xs.Average();
... and so on ...
и теперь у вас есть четыре значения - в два раза - это ты может использовать для построения средней точки. Конечно, вам придется преобразовать двойники в целые числа, используя любое округление, которое вы предпочитаете.
Однако есть специальная версия «Среднее», которая объединяет Select и Average в одну операцию. Вы можете просто сказать
double averageTime = points.Average(p=>p.Time);
и сделать это за один шаг как для проекции, так и для среднего.
Нижняя сторона этого подхода, как некоторые отметили, состоит в том, что последовательность перечисляется четыре раза. Что, вероятно, не имеет большого значения, так как это список в памяти, но может быть более важным, если бы это был дорогостоящий запрос к базе данных.
Другим подходом было бы определить оператор сложения в вашем классе DataPoint (если в целом имеет смысл суммировать две точки, что может и не быть). Когда у вас есть оператор добавления, сумма суммы всех точек проста.
Если вы определяете оператор сложения или нет, вы можете использовать Aggregate для вычисления суммы всех точек, а затем разделить четыре поля суммы на количество точек.
DataPoint sum = points.Aggregate(
new DataPoint(0, 0, 0, 0),
(agg, point)=> new DataPoint(agg.time + point.time, agg.x + point.x, ...));
или, если у вас есть оператор, просто:
DataPoint sum = points.Aggregate(
new DataPoint(0, 0, 0, 0),
(agg, point)=> agg + point);
И теперь у вас есть сумма, поэтому вычисление среднего проста.
Ваши имена переменных никогда не должны начинаться с верхнего регистра. Этот стиль зарезервирован для типов и методов. то есть 'points', а не' Points'. –
Ах да, извините, был неаккуратно в письменном виде. Будет исправлено. –