C#在字典上使用.Min(),但返回一个键?

C#在字典上使用.Min(),但返回一个键?,c#,C#,我不确定这是否可能,据我所知,这是不可能的,但我有一个字典,我想找到值的Min(),但返回KVP或Key。目前我正在使用orderby,但我觉得一旦它变得足够大,效率会非常低。我认为没有任何捷径,我认为迭代每个项目寻找最小值会比先排序快。你可以很容易地比较速度来确定 -编辑:在评论之后- 如果您使用MoreLinq.MinBy,您的代码将更加简洁,但您不会避免迭代每个元素 因此,为了更明确地回答您的问题,您最好迭代每个元素以寻找最低值,当您完成所有元素的迭代后,返回键 如果你出于任何原因不想引

我不确定这是否可能,据我所知,这是不可能的,但我有一个字典,我想找到值的Min(),但返回KVP或Key。目前我正在使用orderby,但我觉得一旦它变得足够大,效率会非常低。

我认为没有任何捷径,我认为迭代每个项目寻找最小值会比先排序快。你可以很容易地比较速度来确定

-编辑:在评论之后-

如果您使用MoreLinq.MinBy,您的代码将更加简洁,但您不会避免迭代每个元素

因此,为了更明确地回答您的问题,您最好迭代每个元素以寻找最低值,当您完成所有元素的迭代后,返回键


如果你出于任何原因不想引入更多的min,我会给出这个答案。

我认为没有任何捷径,我认为迭代每个项目寻找min比先排序要快。你可以很容易地比较速度来确定

-编辑:在评论之后-

如果您使用MoreLinq.MinBy,您的代码将更加简洁,但您不会避免迭代每个元素

因此,为了更明确地回答您的问题,您最好迭代每个元素以寻找最低值,当您完成所有元素的迭代后,返回键

如果您出于任何原因不想引入Morelink,我会提供此答案。

您可以使用及其
MinBy
方法:

var pair = dictionary.MinBy(x => x.Value);
var key = pair.Key;
(是的,这是O(N)而不是O(N log N)-比排序更有效。它也不需要那么多内存。)

您可以使用及其
MinBy
方法:

var pair = dictionary.MinBy(x => x.Value);
var key = pair.Key;

(是的,这是O(N)而不是O(N log N)-比排序更有效。它也不需要那么多内存。)

也许你可以用Add方法将字典封装在一个类中。调用Add方法时,请跟踪所添加的值并保存它(如果该值是min.@Sam),那么删除该值时您会做什么?@JimW但如果删除该值,新值应该是什么?@Sam,那么您将返回线性搜索,您只是在缓存该值。@Sam这可能比需要最小值的键更频繁。也许您可以使用Add方法将字典封装在一个类中。调用Add方法时,请跟踪所添加的值并保存它(如果该值是min.@Sam),那么删除该值时您会做什么?@JimW但如果删除该值,新值应该是什么?@Sam,那么您将返回线性搜索,您只是在缓存该值。@Sam这可能比您需要的最小值键更频繁。