[英]How to get the maximum/minimum value from a SortedDictionary?
我已經按照規定構建了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>
為代表的FlowLayoutPanels.Height
,將上面的循環不斷地給我上最高的面板?
由於鍵是按panels.Keys
排序的,因此最小和最大鍵將只是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);
}
您可以從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();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.