2012-04-24 5 views
16

I가 내가 MAX 값이있는 Guid을 얻을 수있는 방법사전에서 MAX 값을 얻는 방법은 무엇입니까?

Dictionary<Guid, DateTime> d = new Dictionary<Guid, DateTime>(); 

?

d.Keys.Max(); // Returns the greatest key 
+3

가능한 중복 [숫자 값의 최대()를 취득 (http://stackoverflow.com/questions/7268605/get-max-of-alphanumeric-value) –

+0

하기 전에 자신의 연구를 수행하려고하세요 그래서에 대한 질문. –

+1

"GUID"는 "전역 고유 식별자"의 약자이므로 "최대"값을 원한다면 매우 이상하게 보입니다. GUID는 고유성 때문에 사용됩니다. 나는 그들이 명령 한대로 생각하는 것이 타당한 실제 적용을 생각할 수 없다. – jpmc26

답변

29

또한

d.Keys.Max() 

그것입니다 ... 사람이 그렇게 할 이유 분명하지

+7

하지만 그는 최대 가치를 가진 열쇠를 요구했습니다. 이것은 우리에게 최대 키를 제공하기 때문에 잘못된 것입니다. – robbpriestley

+0

질문은 양방향으로 해석 될 수 있습니다. 그리고 OP가이 대답을 받아 들였기 때문에 이것이 그가 의미하는 바라고 추측 할 수 있습니다. – Asik

5

GUID를 그렇게하여 IComparable을 구현 : LINQ 사용

9
  var maxGuid = Guid.Empty; 
      var maxDateTime = DateTime.MinValue; 
      foreach (var kvp in d) 
      { 
       if (kvp.Value > maxDateTime) 
       { 
        maxGuid = kvp.Key; 
        maxDateTime = kvp.Value; 
       } 
      } 
      Console.WriteLine("Guid of max date is: " + maxGuid.ToString()); 
+1

최대 DateTime에 대한 GUID를 원한다고 가정하면 ... –

+1

질문을 다시 읽으면 이것이 올바른 해석이며 올바른 결과를 제공하는 유일한 대답이라고 생각합니다 (LINQ를 사용하면 더 짧아 질 수 있다고 생각하지만, 이 명시적인 루프보다 빠르지는 않습니다). –

+0

@BenVoigt 명시 적 루프가 명확성의 관점에서 여기에서 최선의 방법입니다. 또 다른 게시물 [here] (https://stackoverflow.com/q/2805703/465053)에 아주 좋은 답변이 있습니다. 이 게시물에서 허용되는 대답은 LINQ를 사용하여 단일 검색을한다고 주장합니다. – RBT

29

이 훌륭하게 작동합니다. MAX 날짜의 GUID를 반환합니다.

Dictionary<Guid, DateTime> d = new Dictionary<Guid, DateTime>(); 
var guidForMaxDate = d.FirstOrDefault(x => x.Value == d.Values.Max()).Key; 
+1

솔리드 코드는 작업을 수행합니다. –

+0

좋은데,'d.Values.Max()'를 미리 변수에 넣으십시오. 그렇지 않으면 매 반복마다 Max()에 대한 검색이 반복됩니다. – Nyerguds

0

또 다른 방법은 단일 KeyValuePair를 얻는 데 도움이 될 수 있습니다.

5

첫 번째로 데이터를 정렬하는 것이 하나의 해결책 일 수 있습니다.

var maxGuid = d.OrderByDescending(x => x.Value).FirstOrDefault().Key; 
0

답변이 만족스럽지 않습니다. 그래도 MoreLinq을 사용하는 다음 코드는 작업을 수행했습니다.

var fooDict = new Dictionary<string, int>(); 
var keyForBiggest = fooDict.MaxBy(kvp => kvp.Value).Key; 
var biggestInt = fooDict[keyForBiggest]; 
0

사전에 LINQ를 사용합니다.

var MaximumValue = dict.FirstOrDefault(x => x.Value.Equals(dict.Values.Max())); 
관련 문제