C# - 字典 - 如何在字典中获取特定类值的最大值?

Cfl*_*lux 0 c# linq dictionary

我有一本字典,我试图在其中找到特定类值的最大值,类似于获取列表的最大值。我已经搜索了几个小时,但我发现的只是如何从具有键和单个值的字典中获取值。我也遇到过 Linq,但我没有找到任何关于如何在字典的类值中搜索 Max 值的信息。我很确定有办法,我只是错过了什么?

就我而言,我试图找到lineDistance我班级的最大值LineInfo

我找到的链接很近

这个但它只处理一个键和一个值,而不是一个类

这个似乎可能在正确的轨道上,但检查的答案建议运行嵌套的 foreach。我想有一种更简单/更复杂的方法吗?

任何和所有的帮助表示赞赏。

这是我的代码,它相当简单:

class LineInfo
    {
        public double lineDistance { get; set; }
        public LineSegment2d lineSegment2D1 { get; set; }
        public LineSegment2d lineSegment2D2 { get; set; }
    }

Run Code Online (Sandbox Code Playgroud)
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, lineSegment2D1 = lineSegment2DList[i], lineSegment2D2 = lineSegment2DList[j] });

double pointDistance2 = lineSegment2DList[i].EndPoint.GetDistanceTo(lineSegment2DList[j].StartPoint);
lines.Add(2, new LineInfo { lineDistance = pointDistance2, lineSegment2D1 = lineSegment2DList[i], lineSegment2D2 = lineSegment2DList[j] });


double pointDistance3 = lineSegment2DList[i].EndPoint.GetDistanceTo(lineSegment2DList[j].EndPoint);
lines.Add(3, new LineInfo { lineDistance = pointDistance3, lineSegment2D1 = lineSegment2DList[i], lineSegment2D2 = lineSegment2DList[j] });


Run Code Online (Sandbox Code Playgroud)

Gur*_*ron 5

为了获得LineInfo最大的收益,lineDistance您可以使用Values集合。由于MaxBy标准 LINQ 中没有,您可以通过以下方式实现类似的效果Aggregate

var max = lines.Values
    .Aggregate((acc, curr) => acc.lineDistance > curr.lineDistance ? acc: curr);
Run Code Online (Sandbox Code Playgroud)