繁体   English   中英

标识对象列表中属性的最小值和最大值

[英]Identifying Min and Max values of a property on a list of objects

我有这堂课

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];

每个曲线都有大约1000个TimeSeriesDataPoint对象的列表。 我需要为每个曲线(曲线[0],曲线[1]等)标识属性“值”的最小值和最大值。

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

雷南

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的 MinMax方法的实现作为起点。

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

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

对于每条曲线,这将为您提供最小和最大。 但是,它将枚举每个集合两次(一次代表最小,一次代表最大)。

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>> ,其中每个元素都是一对最小/最大值

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM