2014-06-18 2 views
0

저는 SortedDictionary<int, FlowLayoutPanel> panels을 작성했습니다. 나는 현재 이와 같은 사전을 반복하고있다.SortedDictionary에서 최대/최소값을 얻는 방법?

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

최대 키 값을 가진 항목을 얻으려면. 나는 지금 사전에이 0이 될 때까지 연산을 연속적으로 적용하는 다른 루프를 작성하려고합니다.이 루프 내에서 각 반복마다 사전에서 최대 값과 최소값을 가져와야합니다. SortedDictionary MSDN 항목을 읽었으며이 작업을 수행하기 위해 linq을 사용해야합니다. 사실입니까? 내가 어떻게 그럴 수 있니? ,

그리고 난에 좋은 답변을 찾을 수없는 보너스 질문, <int, FlowLayoutPanel>intFlowLayoutPanels.Height을 표현하는 경우 즉, 가장 작은 값에 가장 큰에서 SortedDictionaries 종류의 할 (내가 LINQ를 만진 적이없는) 것 지속적으로 위의 루프 내게 가장 높은 패널 줄래?

+0

LINQ는 이러한 작업을 수행하기위한 필요가 없습니다 :

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

또한 같은 Enumerable.MinEnumerable.Max를 사용할 수 있습니다. 그러나 우아한 LINQ 솔루션은 http://stackoverflow.com/questions/22240167/get-max-and-min-in-a-single-linq-query를 참조하십시오. –

답변

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); 
} 
+3

'ToList()'호출이이 O (n)을 만든다는 것을 알고 있습니까? –

+0

@ GáborBakos 나는 정말로 아니었다. 알아 둘만한. 그러나 foreach 내의 사전에서 항목을 제거하는 경우 ['KeyCollection']을 사용할 수 없습니다 (http://msdn.microsoft.com/en-us/library/ms132264 (v = vs.110) .aspx)를 직접 참조하십시오. –

0

당신은 각각 최소 및 최대가 될 것 SortedDictionary에서 FirstLast 키를 얻을 수 있습니다.

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

'Keys.Count'가 '0'이 아닌 시점을 확인하는 것으로 충분하지 않습니까? (한 요소의'First()'와'Last()'를 계산할 수 있습니다.) –

관련 문제