2

我有这门课

class TimeSeriesDataPoint
{
    public int HistorianID { get; set; }
    public string Time { get; set; }
    public double Value { get; set; }
    public int Quality { get; set; }
}

以及该类的对象列表数组

List<TimeSeriesDataPoint>[] Curves = new List<TimeSeriesDataPoint>[numberOfCurves];

每个 Curve 都有一个包含大约 1000 个 TimeSeriesDataPoint 对象的列表。我需要为每个曲线(曲线 [0]、曲线 [1] 等)确定属性“值”的最小值和最大值。

我可以使用 List 类中的 Min 和 Max 方法吗?有人可以帮我吗?

仁南

4

3 回答 3

5
foreach (var curve in Curves)
{
    double min = curve.Min(x => x.Value);
    double max = curve.Max(x => x.Value);
    // do something with your min, max, and curve
}

如果性能是一个问题,如果您自己实现它,您可以一次计算最小值和最大值。您可以使用Mono 的 and 方法的实现作为Min起点Max

于 2013-09-20T18:39:34.583 回答
4

您可以使用Min()andMax()扩展方法:

var results = Curves.Select(c => new { Min=c.Min(t => t.Value), Max=c.Max(t => t.Value) });

这将为您提供每条曲线的最小值和最大值。但是,它将对每组进行两次枚举(一次用于最小值,一次用于最大值)。

于 2013-09-20T18:40:14.840 回答
2
var maxEachCurve = Curves.Select( curve => curve.Max( x => x.Value ) );
var minEachCurve = Curves.Select( curve => curve.Min( x => x.Value ) );

maxEachCurveminEach曲线现在是一个IEnumerable<double>,其中每个元素都是该曲线的最大值/最小值

或一次性完成:

var minMaxEachCurve = Curves.Select( 
    curve => new Tuple<double,double>(
        curve.Min( x=> x.Value), 
        curve.Max( x => x.Value ) ));

minMaxEachCurve 现在是一个IEnumerable<Tuple<double,double>>每个元素都是一对最小/最大值的地方

于 2013-09-20T18:43:25.757 回答