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

C#-字典-如何在字典中获得特定类值的最大值?,c#,linq,dictionary,C#,Linq,Dictionary,我有一个字典,我试图找到一个特定类值的最大值,类似于得到一个列表的最大值。我已经搜索了几个小时,但我发现的只是如何从一个有键和单个值的字典中获取一个值。我也遇到过Linq,但我没有找到任何关于如何搜索字典类值的最大值的方法。我很确定有办法,我只是错过了什么 在我的例子中,我试图找到我的类LineInfo的最大lineDistance 我找到的链接很近 但它只处理一个键和一个值,而不是一个类 看起来它可能在正确的轨道上,但是检查过的答案建议运行嵌套的foreach。我可以想象有一种更简单/更具社会

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

在我的例子中,我试图找到我的类
LineInfo
的最大
lineDistance

我找到的链接很近

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

看起来它可能在正确的轨道上,但是检查过的答案建议运行嵌套的foreach。我可以想象有一种更简单/更具社会性的方式吗

非常感谢您的帮助

这是我的代码,非常简单:

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

var lines=newdictionary();
double pointDistance0=lineSegment2DList[i].StartPoint.GetDistanceTo(lineSegment2DList[j].StartPoint);
添加(0,新LineInfo{lineDistance=pointDistance0,lineSegment2D1=lineSegment2DList[i],lineSegment2D2=lineSegment2DList[j]});
double pointDistance1=lineSegment2DList[i].StartPoint.GetDistanceTo(lineSegment2DList[j].EndPoint);
添加(1,新LineInfo{lineDistance=pointDistance1,lineSegment2D1=lineSegment2DList[i],lineSegment2D2=lineSegment2DList[j]});
double pointDistance2=lineSegment2DList[i]。EndPoint.GetDistanceTo(lineSegment2DList[j]。StartPoint);
添加(2,新LineInfo{lineDistance=pointDistance2,lineSegment2D1=lineSegment2DList[i],lineSegment2D2=lineSegment2DList[j]});
double pointDistance3=lineSegment2DList[i]。EndPoint.GetDistanceTo(lineSegment2DList[j]。EndPoint);
添加(3,新LineInfo{lineDistance=pointDistance3,lineSegment2D1=lineSegment2DList[i],lineSegment2D2=lineSegment2DList[j]});

要获取最大
线距离
线信息
,可以使用
集合。由于标准LINQ中没有
MaxBy
,因此您可以通过以下方式实现类似效果:


如果我正确理解了这个问题,那么Linq中的
Max
有一个重载,允许您指定一个属性,即:

double max = lines.Max(x => x.Value.lineDistance);
编辑

如果您想要对象,则@itsme86解决方案效果最佳:

LineInfo maxLineInfo = lines.Values.OrderByDescending(line => line.lineDistance).First();

那么您只需要字典中具有最大
线距离的
LineInfo
var result=lines.Values.OrderByDescending(line=>line.lineDistance).First()为什么这些东西存储在字典中?一个数组就足够了?@itsme86如果你想把你的评论作为答案,我会从你第一个开始检查它。MoreLinq的
MaxBy
很可能就是你想要的。是的,但这只返回max
lineDistance
值,而不是带有max
lineDistance
值的对象。也许这就是OP想要的。这有点不清楚。@itsme86啊,我没有意识到,我添加了你的解决方案,并相信你,因为这是最简单的解决方案。@itsme86之所以没有发布
OrderBy
注释作为答案,是因为从概念上讲,找到“Max by”是错误的——普通开发人员很难在O(n log n)时建议O(n log n)答案很容易实现——这与OP提到的被接受的有什么不同?@PavelAnikhouski,我不知道如何访问我的类中的特定字段,
lineDistance
值。上师的回答允许我这么做。
double max = lines.Max(x => x.Value.lineDistance);
LineInfo maxLineInfo = lines.Values.OrderByDescending(line => line.lineDistance).First();