2012-04-24 20 views
16

मैंशब्दकोश से MAX मूल्य कैसे प्राप्त करें?

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

मैं एक Guid जो MAX महत्व है कैसे प्राप्त कर सकता है?

+3

के संभावित डुप्लिकेट [अक्षरांकीय मूल्य के मैक्स() जाओ] (http://stackoverflow.com/questions/7268605/get-max-of-alphanumeric-value) –

+0

से पहले अपने स्वयं के अनुसंधान करने के लिए प्रयास करें एसओ पर सवाल पूछना –

+1

चूंकि "GUID" "वैश्विक स्तर पर अद्वितीय पहचानकर्ता" के लिए खड़ा है, इसलिए यह अविश्वसनीय रूप से अजीब लगता है कि आप "अधिकतम" मान चाहते हैं। इसकी विशिष्टता के कारण एक GUID का उपयोग किया जाता है; मैं एक वास्तविक दुनिया के आवेदन के बारे में नहीं सोच सकता जहां इसे आदेश देने के बारे में सोचना समझ में आता है। – jpmc26

उत्तर

29

LINQ का उपयोग करना:

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

लेकिन उन्होंने कुंजी की मांग की जिसमें अधिकतम मूल्य है। यह सिर्फ हमें अधिकतम कुंजी देता है, इसलिए यह गलत बात है। – robbpriestley

+0

प्रश्न दोनों तरीकों से व्याख्या किया जा सकता है, और चूंकि ओपी ने इस उत्तर को स्वीकार किया है, इसलिए मैं मान सकता हूं कि इसका मतलब यही था। – Asik

5

Guid लागू करता IComparable, तो:

d.Keys.Max() 

यह भी स्पष्ट नहीं है कि क्यों एक ऐसा करना चाहते हैं हैं ...

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

मान लीजिए कि आप अधिकतम दिनांक समय के लिए GUID चाहते हैं ... –

+1

प्रश्न को दोबारा पढ़ना, मुझे लगता है कि यह सही व्याख्या है, और एकमात्र उत्तर जो सही परिणाम देता है (हालांकि मुझे संदेह है कि इसे LINQ के साथ छोटा बनाया जा सकता है, यह इस स्पष्ट पाश से कहीं अधिक तेज़ नहीं होगा)। –

+0

@BenVoigt स्पष्ट लूप स्पष्टता के मामले में यहां सबसे अच्छा सौदा है। एक और पोस्ट [यहां] (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() 'आउट मिल जाएगा, अन्यथा यह संभवतः प्रत्येक एकल पुनरावृत्ति में अधिकतम() के लिए खोज को दोहराएगा। – Nyerguds

0

एक और तरीका हो सकता है एकल KeyValuePair पाने के लिए मदद करता है।

KeyValuePair<char, int> GuidKeyPair = guidDict.FirstOrDefault(MaxGuid => MaxGuid.Value == guidDict.Values.Max()); 
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())); 
संबंधित मुद्दे