2012-03-07 2 views
0

나는 사전과 같이이찾기 특정 키를

Key: 1 => Value: [3,2] 
Key: 2 => Value: [] 
Key: 3 => Value: [6,7] 

이제 목록에서 가장 높은 값을 가진 키를 찾고 싶습니다. 상기 람다는 7 번 키를 3 될 일 사전의 목록으로 표시되어 있으므로 키 3 여기서 키 - 값 쌍을 나타낸다 3 반환해야이 경우처럼

.

답변

3

약간 해키하지만 작동해야합니다.

var dict = new Dictionary<int, List<int>>(); 

    dict.Add(1, new List<int>() { 1, 2 }); 
    dict.Add(2, new List<int>() { 4, 5 }); 
    dict.Add(3, new List<int>() { 1, 7 }); 

    var max = dict.Select(x => new { Key = x.Key, Value = x.Value.Max() }).OrderByDescending(x => x.Value).First().Key; 
// returns 3 
     // Other sample input 
     dict.Add(1, new List<int>() { 1, 2 }); 
     dict.Add(2, new List<int>() { 4, 7 }); 
     dict.Add(3, new List<int>() { 1, 2 }); 
     // returns 2 
     dict.Add(1, new List<int>() { 1, 2 }); 
     dict.Add(2, new List<int>() { 4, 7 }); 
     dict.Add(3, new List<int>() { 1, 7 }); 
     // returns 2 
     dict.Add(1, new List<int>() { 1,10 }); 
     dict.Add(2, new List<int>() { 4, 7 }); 
     dict.Add(3, new List<int>() { 1, 7 }); 
     // returns 1 

편집 : 최대 값 목록에서 가장 작은 값 :

var min_value_in_maxList = dict.Select(x => new { Key = x.Key, ValueMax = x.Value.Max(), ValueMin = x.Value.Min() }).OrderByDescending(x => x.ValueMax).First().ValueMin; 
+0

당신은 람다의 새로운 키워드를 설명 할 수 있습니다. 나는 그 부분을 얻지 못하고있다. –

+0

이 경우 new는 Key와 Value의 두 가지 속성을 가진 익명 형식을 생성합니다. 자세한 답변은이 질문을 참조하십시오. http://stackoverflow.com/questions/48668/how-should-anonymous-types-be-used-in-c – Alex

+0

'List '에서 가장 적은 숫자를 찾으려면 어떻게해야합니까? 선물. –

1

불행히도 LINQ to Objects에 내장 된 기능이 없어서 특히 유쾌합니다. 당신은뿐만 아니라 각 목록에 Max를 사용할 필요의 약간의 트릭,하지만 내 MoreLINQ 프로젝트에서 MaxBy를 사용할 수 있습니다

var maxKey = pegMap.MaxBy(x => x.Value.Max()) 
        .Key; 

주를 그 목록에 같은 상위 요소가 여러 개의 키가있는 경우, 그것을 첫 번째 것이 반환됩니다.

1

이 작동해야

pegMap.SelectMany(a => a.Value, (a, b) => new {holdKey = a.Key,listValue= b}).OrderByDescending(a=>a.listValue).First().holdKey; 
+0

: @Alex 답변과 거의 같은 죄송합니다. 답변하기 전에 새로 고침하지 않으 셨습니다 . – labroo

+0

문제 없습니다. 생각해 봐야 할 부분입니다. 나를 포함한 많은 사람들이 답변이나 댓글을 달기 전에 새로 고침을하지 않습니다. 실시간 문제. –