如何将列表拆分为LINQ组并在组中获得最大价值

时间:2010-07-28 17:05:11

标签: c# linq

我有一个List,我想计算一个double [360],它包含每个轴承的最大范围(最接近的度数)。一个问题是,我使用的图表绘图软件要求每个学位都没有孔。 我知道MoreLinq批量扩展,但不太确定如何使用它...

这是我到目前为止的代码: -

List<PolarCoords> plots = ...;
double chartVals = new double[360]; // unused degrees will be zero

double MaxRangesByDegree = from polar in plots let angle = RadToDeg(polar.Bearing)
                           group plot by angle into degreeBuckets
                           orderby degreeBuckets
                           select MaxRange = (from polar2 in degreeBuckets select polar2.SlantRange).Max().ToArray()

// somehow merge chartVals and MaxRangesByDegree so no holes

我可能试图用一个查询来咬掉太多东西,并且当然可以通过一个简单的for循环来实现它,但它是学习LINQ的一个很好的练习:-)目前代码抛出一个SystemException:至少有一个对象必须实现IComparable ......

2 个答案:

答案 0 :(得分:0)

您提到的例外情况是由于Max对象中没有已知方法来计算SlantRange,因为SlantRange未实现IComparable<T>或{{ 1}}。

答案 1 :(得分:0)

var plotsByDegree = plots.ToLookUp(polar => RadToDeg(polar.Bearing));

return Enumerable.Range(0,360)
                 . Select(degree => plotsByDegree.Contains(degree) ? plotsByDegree[degree].Max (polar => polar.SlantRange) : 0);