2012-04-24 24 views
16

Ben ben MAX değere sahip bir Guid alabilirsiniz nasılSözlükten MAX değeri nasıl alınır?

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

?

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

olası yinelenen [alfanümerik değerin Max() Get] (http://stackoverflow.com/questions/7268605/get-max-of-alphanumeric-value) –

+0

önce kendi araştırma yapmak deneyin SO hakkında soru sormak. –

+1

"GUID", "global olarak benzersiz tanımlayıcı" anlamına geldiğinden, "maksimum" bir değer elde etmek istediğinizden çok garip görünüyor. Bir GUID, benzersizliği nedeniyle kullanılır; Onları hiç sipariş edildiği gibi düşünmenin mantıklı olduğu gerçek bir dünya uygulamasını düşünemiyorum. – jpmc26

cevap

29

Ayrıca

d.Keys.Max() 

öyle ... biri bunu neden istediğini belli değil

+7

Ancak Max Değeri olan Anahtarı istedi. Bu bize azami Anahtarı verir, bu yüzden yanlış bir şey. – robbpriestley

+0

Soru her iki şekilde de yorumlanabilir ve OP bu cevabı kabul ettiği için bunun ne anlama geldiğini düşünebilirim. – Asik

5

Guıd yüzden, IComparable uygulayan: Entities kullanarak

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

Max DateTime için GUID istediğinizi varsayalım ... –

+1

Soruyu yeniden okurken, bunun doğru yorumlama olduğunu ve doğru sonucu veren tek cevabın olduğunu düşünüyorum (LINQ ile daha kısa yapılabileceğinden şüpheliyim, Bu açık döngüden daha hızlı olmayacaktır). –

+0

@BenVoigt açık döngü burada açıklık açısından en iyi anlaşmadır. Bazı çok iyi cevaplarla [burada] (https://stackoverflow.com/q/2805703/465053). Bu yazıda kabul edilen cevap LINQ kullanarak tek bir taramaya sahip olduğunu iddia ediyor. – RBT

29

Bu harika çalışıyor. MAX tarihi için GUID değerini döndürür.

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

Katı kod, –

+0

numaralı işi güzel yapıyor, ancak ben bunu önceden bir değişkene 'd.Values.Max() 'yi alıyorum, aksi halde muhtemelen her bir yineleme için Max() için bu aramayı tekrarlayacaktır. – Nyerguds

0

başka yolu da kudreti Tek KeyValuePair almak için yardımcı olur.

KeyValuePair<char, int> GuidKeyPair = guidDict.FirstOrDefault(MaxGuid => MaxGuid.Value == guidDict.Values.Max()); 
5

ilk etapta verilerinizi Sipariş tek çözüm olabilir.

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

Kabul edilen yanıt benim için çalışmadı. Aşağıdaki kod (MoreLinq kullanılarak), şu işi yapmıştır: Sözlük üzerinde LINQ kullanarak:

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

.

var MaximumValue = dict.FirstOrDefault(x => x.Value.Equals(dict.Values.Max())); 
ait
İlgili konular