簡體   English   中英

如何從SortedDictionary獲取最大/最小值?

[英]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獲取FirstLast鍵,這分別是最小和最大。

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();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM