我按规定制作了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}},上面的循环会不断给我最高的面板?
答案 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
获取Last
和SortedDictionary
密钥,分别为最小值和最大值。
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();