2010-07-26 11 views
10

क्या 'सर्वश्रेष्ठ' जिस तरह से पैसे के क्रम में एक StringDictionary से अधिक सॉर्ट करने के लिए (या पुनरावृति) (कुंजी नहीं) हैसी # मूल्य द्वारा एक StringDictionary, नहीं कुंजी छँटाई

जैसे कुंजी - मूल्य

  • 1 - एक्स लेबल
  • 2 - एक लेबल
  • 3 - एक लेबल
  • 3 - अन्य लेबल

  • 2 देना होगा - अन्य लेबल
  • 1 - एक्स लेबल

संपादित करें - मेरा मतलब है ".NET 2.0 सुविधाओं का उपयोग करना"। क्षमा करें, मुझे बुरा ...

उत्तर

14

उपयोग LINQ:

var items = from k in d.Keys 
        orderby d[k] ascending 
        select k; 

आप सी # 2.0 सुविधाओं के लिए प्रतिबंधित कर रहे हैं, तो इसका उपयोग करें:

IDictionary<string, string> d = new Dictionary<string, string>(); 
    d["1"] = "X label"; 
    d["2"] = "A label"; 
    d["3"] = "Other Label"; 

    List<KeyValuePair<string, string>> myList = new List<KeyValuePair<string, string>>(d); 
    myList.Sort(
     delegate(KeyValuePair<string, string> a, 
     KeyValuePair<string, string> b) 
     { 
      return a.Value.CompareTo(b.Value); 
     } 
    ); 

नोट: आप एक StringDictionary बजाय उपयोग कर रहे हैं शब्दकोश का, एंथनी का समाधान देखें।

+0

46 सेकंड ..... – Will

+0

दरअसल यह केवल मूल्यों को क्रमबद्ध करेगा, न कि संबंधित कुंजी भी। – SWeko

+2

@Sweko यह मूल्य (डी [के] = मूल्य) द्वारा क्रमबद्ध कुंजी का चयन करता है। – Will

4

StringDictionary कक्षा का उपयोग करके, LINQ के OrderBy का उपयोग करने का एक तरीका यहां दिया गया है। मान लें कि आपके पास .NET 3.5 है।

var sortedDictionary = dictionary.Cast<DictionaryEntry>().OrderBy(pair => pair.Value); 

2.0 का उपयोग करके, यह थोड़ा सा ट्रिकियर है। एक तुलना प्रतिनिधि का उपयोग कर एक दृष्टिकोण यहां दिया गया है।

StringDictionary dictionary = new StringDictionary(); 
dictionary.Add("1", "One"); 
dictionary.Add("2", "Two"); 
dictionary.Add("3", "Three"); 

DictionaryEntry[] sortedDictionary = new DictionaryEntry[dictionary.Count]; 
dictionary.CopyTo(sortedDictionary, 0); 
Comparison<DictionaryEntry> comparison = new Comparison<DictionaryEntry>(delegate (DictionaryEntry obj1, DictionaryEntry obj2) { return ((string)obj1.Value).CompareTo((string)obj2.Value); }); 
Array.Sort(sortedDictionary, comparison); 

तो वास्तविक तरह sortedDictionary सरणी में होगा।

+0

+1: जब आप obj1! = Null (जब तक आप अन्यथा guarentee कर सकते हैं) तो आपको विशेष हैंडलिंग की आवश्यकता हो सकती है। –

+1

@ बाइनरी, जो निश्चित रूप से अन्वेषण करने योग्य हो सकता है। अधिक संभावना परिदृश्य है कि obj1.Value शून्य हो सकता है। तो बिल्कुल आवश्यकतानुसार चेक जोड़ें। –

संबंधित मुद्दे