如何解决C#-字典-如何获取字典中特定类的最大值?
我有一本字典,试图在其中查找特定类值的最大值,类似于获取列表的最大值。我已经搜索了几个小时,但我发现的全部是如何从具有键和单个值的字典中获取值。我也遇到过Linq,但是在如何搜索字典的类值中的“最大值”方面我什么也找不到。我很确定有办法,只是想念什么?
对于我来说,我正在尝试找到班级lineDistance
的最大值LineInfo
我找到的链接已关闭
this one,但它只处理单个键和单个值,而不处理类
this one似乎在正确的轨道上,但是选中的答案建议运行嵌套的foreach。我会想象有一种更简单/更复杂的方法吗?
任何帮助,我们将不胜感激。
这是我的代码,非常简单:
class LineInfo
{
public double lineDistance { get; set; }
public LineSegment2d lineSegment2D1 { get; set; }
public LineSegment2d lineSegment2D2 { get; set; }
}
var lines = new Dictionary<int,LineInfo>();
double pointDistance0 = lineSegment2DList[i].StartPoint.GetDistanceTo(lineSegment2DList[j].StartPoint);
lines.Add(0,new LineInfo {lineDistance = pointDistance0,lineSegment2D1 = lineSegment2DList[i],lineSegment2D2 = lineSegment2DList[j] });
double pointDistance1 = lineSegment2DList[i].StartPoint.GetDistanceTo(lineSegment2DList[j].EndPoint);
lines.Add(1,new LineInfo { lineDistance = pointDistance1,lineSegment2D2 = lineSegment2DList[j] });
double pointDistance2 = lineSegment2DList[i].EndPoint.GetDistanceTo(lineSegment2DList[j].StartPoint);
lines.Add(2,new LineInfo { lineDistance = pointDistance2,lineSegment2D2 = lineSegment2DList[j] });
double pointDistance3 = lineSegment2DList[i].EndPoint.GetDistanceTo(lineSegment2DList[j].EndPoint);
lines.Add(3,new LineInfo { lineDistance = pointDistance3,lineSegment2D2 = lineSegment2DList[j] });
解决方法
要获得最多LineInfo
个lineDistance
,可以使用Values
集合。由于标准LINQ中没有MaxBy
,因此您可以使用Aggregate
达到类似的效果:
var max = lines.Values
.Aggregate((acc,curr) => acc.lineDistance > curr.lineDistance ? acc: curr);
,
如果我对问题的理解正确,则Linq中的Max
有一个重载,它允许您指定一个属性,即:
double max = lines.Max(x => x.Value.lineDistance);
修改
如果您需要该对象,则@ itsme86解决方案最有效:
LineInfo maxLineInfo = lines.Values.OrderByDescending(line => line.lineDistance).First();
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。