从具有最小值的KeyvaluePairs列表获取KeyValuePair

Ele*_*ena 4 .net c#

我需要从List<KeyValuePair<Int, Int>>依赖于最小值的列表中获取Kvp .

我试过这个:

KeyValuePair<Int, Int> kvp= listOfKvps.Min(e=> e.Key);
Run Code Online (Sandbox Code Playgroud)

但这只返回了价值,而不是KeyValuePair我需要的全部价值.

Luk*_*keH 6

var min = listOfKvps.OrderBy(kvp => kvp.Key).First();
Run Code Online (Sandbox Code Playgroud)

如果你想通过序列中的单个O(n)传递,而不是要求O(n log n)排序,那么你可以这样做:

var min = listOfKvps.Aggregate((agg, kvp) => (kvp.Key < agg.Key) ? kvp : agg);
Run Code Online (Sandbox Code Playgroud)

(当然,第二个版本的可读性/直觉性远远低于第一个版本,即使它确实具有更好的理论性能.使用某种MinBy方法会更有意义:要么自己编写,请使用Marc的答案使用MoreLINQ的版本.)

  • 注意,时间排序为O(n lg n),空间排序为O(n); 你可以在O(n)时间和O(1)空间中获取最小值. (4认同)