我有一个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 ......
答案 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);