如何从SortedDictionary中获得最大/最小值
本文关键字:最小值 SortedDictionary | 更新日期: 2023-09-27 18:09:07
我已经按照规定构建了一个SortedDictionary<int, FlowLayoutPanel> panels
。我现在正在像这样循环遍历字典
foreach (var key in panels.Keys.ToList())
{
FlowLayoutPanel tallestPanel = panels[key];
}
获取键值最大的表项。我现在正试图编写另一个循环,不断地应用一个操作,直到字典的Count
为0。在这个循环中,我需要在每次迭代时从字典中获取最大值和最小值。我已经阅读了SortedDictionary
MSDN条目,看起来我需要使用linq来完成这一点。这是真的吗?我该怎么做呢?(我从未碰过linq)
还有一个额外的问题,我找不到一个很好的答案,SortedDictionaries
从最大到最小的值排序,即如果<int, FlowLayoutPanel>
中的int
代表FlowLayoutPanels.Height
,上面的循环会不断给我最高的面板吗?
您可以从SortedDictionary
中分别获得最小值和最大值的First
和Last
密钥。
int minKey = 0;
int maxKey = 0;
if (panels.Keys.Count >= 2)
{
minKey = panels.Keys.First();
maxKey = panels.Keys.Last();
}
您也可以使用Enumerable.Min
和Enumerable.Max
,如:
minKey = panels.Keys.Min();
maxKey = panels.Keys.Max();
因为键是在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);
}