2009-12-11 3 views
2

나는이 질문에 대한 답을 찾기 위해 공정한 비트를했지만, 내가 찾을 수있는 예는 내가 어디에 있어야하는지 알 수 없었다.LINQ를 사용하여 Dictionary (SomeEnum, Integer)의 최대 값에 해당하는 Key를 얻는 방법은 무엇입니까?

유형 SomeEnum의 속성을 가진 일부 객체를 반복하면서 채우는 Dictionary(Of SomeEnum, Integer)이 있습니다. 루프가 끝나면 개체 목록에서 가장 많이 발생하는 SomeEnum 형식을 원합니다. 또한 디스플레이 목적으로 다른 수를 필요로하므로 간단한 Dictionary(Of K, V)을 사용하십시오.

각 키 수를보고 가장 많이 발생하는 SomeEnum 키를 돌려 줄 LINQ 쿼리를 찾고 있습니다. 또는 아마도 그것에 대해 갈 수있는 더 쉬운 방법이있을 것입니다.

나는이 할 수있는 :

Return (From kvp As KeyValuePair(Of SomeEnum, Integer) _ 
      In Me.MyObjects Order By kvp.Value Descending _ 
      Select kvp).First().Key 

을하지만 정렬이 어떻게 든에 최대()를 흔들하는 것보다 더 비싼 작동하지 않을 것인가? 저는 LINQ n00b입니다. 그래서 어떤 피드백도 크게 감사 할 것입니다.

답변

3

MoreLINQMaxBy 메서드를 사용할 수 있습니다. 이미 StackOverflow에 similar question이 있습니다 (C#에 있지만). 당신은 그것을 좋아 사용할 수 있습니다

Return dic.MaxBy(Function(pair) pair.Value).Key 
0

이 같은이 한 :

(From kvp In dic Select kvp Where kvp.Value = dic.Values.Max).First.Key 
0

오래된 질문을하지만 난 그것을 다른 사람을 도움이 경우 내 LINQ VB 답변을 제공 할 것이라고 생각합니다.

Return dic.Aggregate(Function(l, r) If(l.Value > r.Value, l, r)).Key 
관련 문제