如何从SortedDictionary获取最大/最小值?

时间:2014-06-18 17:52:17

标签: c# linq dictionary

我按规定制作了SortedDictionary<int, FlowLayoutPanel> panels。我目前正在循环这样的字典

foreach (var key in panels.Keys.ToList())
{
    FlowLayoutPanel tallestPanel = panels[key];
}

获取具有最大键值的条目。我正在尝试编写另一个循环,该循环不断应用操作,直到字典的Count为0.在此循环中,我需要在每次迭代时从字典中获取最大值和最小值。我已阅读SortedDictionary MSDN条目,看起来我需要使用linq来完成此任务。这是真的?我该怎么办? (我从未接触到linq)

一个我无法找到合适答案的奖励问题,SortedDictionaries从最大值到最小值排序,即int中的<int, FlowLayoutPanel>代表{{} 1}},上面的循环会不断给我最高的面板?

2 个答案:

答案 0 :(得分:2)

由于密钥按panels.Keys排序,因此最小和最大密钥只是panels.Keys中的第一个和最后一个项目。您不需要LINQ来执行此操作:

var keys = panels.Keys.ToList();
// manually-determined indexes
var min = panels[keys[0]];
var max = panels[keys[keys.Count - 1]];

虽然可以说,如果你使用它会更清楚:

var keys = panels.Keys.ToList();
// or with LINQ
var min = panels[keys.First()];
var max = panels[keys.Last()];

如果你想从循环遍历panel.Keys.ToList()的循环中获取这些值并从字典中删除每个项目(这是我认为你所描述的),那么最小值总是当前的,最大值始终是最后一个。

var keys = panels.Keys.ToList();
var max = panels[keys.Last()];
foreach (var key in keys)
{
    var min = panels[key];
    // do stuff
    panels.Remove(min);
}

答案 1 :(得分:0)

您可以从First获取LastSortedDictionary密钥,分别为最小值和最大值。

int minKey = 0;
int maxKey = 0;
if (panels.Keys.Count >= 2)
{
    minKey = panels.Keys.First();
    maxKey = panels.Keys.Last();
}

您还可以使用Enumerable.MinEnumerable.Max,如:

minKey = panels.Keys.Min();
maxKey = panels.Keys.Max();