2012-12-12 12 views
7

मैं एक OrderedDictionary (System.Collections.Specialized) सॉर्ट करने के लिए की जरूरत है मैं इस कोड है:सी # में लिंक का उपयोग करके ऑर्डर्ड डिक्शनरी को कैसे क्रमबद्ध करें (.NET 3.5 का उपयोग करके)?

var od = new System.Collections.Specialized.OrderedDictionary(); 
od.Add("a1", 3); 
od.Add("a2", 5); 
od.Add("a3", 2); 
od.Add("a4", 4); 

मैं मूल्यों का उपयोग कर इसे सुलझाने के लिए कामना करता हूं। क्या मैं लिंक का उपयोग कर कर सकता हूं?

उत्तर

4

निम्नलिखित आपको अपने OrderedDictionary के आधार पर एक क्रमबद्ध शब्दकोश देगा।

var normalOrderedDictionary= od.Cast<DictionaryEntry>() 
         .OrderBy(r=> r.Value) 
         .ToDictionary(c=> c.Key, d=> d.Value); 

एक बात हालांकि नहीं है, ToDictionary एक नियमित शब्दकोश लौटे लेकिन आदेश देखने के लिए शब्दकोश में बनाए रखा है, जैसे ही कोई नया आइटम शब्दकोश में डाला जाता है, वे आदेश की गारंटी नहीं दी जा सकती है। इससे बचने के लिए, का उपयोग SortedDictionary<TKey,TValue> जो एक निर्माता है कि पैरामीटर

var sortedDictionary = new SortedDictionary<string, string>(normalOrderedDictionary); 

के रूप में एक नियमित शब्दकोश लेता (ऊपर लाइन में कुंजी के लिए सही प्रकार और मूल्य के साथ string को बदलने के लिए सुनिश्चित करें) है।

आउटपुट:

foreach (var entry in sortedDictionary) 
    Console.WriteLine("Key: {0} Value: {1}", entry.Key, entry.Value); 

Key: a3 Value: 2 
Key: a1 Value: 3 
Key: a4 Value: 4 
Key: a2 Value: 5 
+1

धन्यवाद हबीब..तुम्हारा जवाब भी काम करता है। मेरे पास अभी भी बहुत प्रतिष्ठा अंक नहीं हैं। –

+2

ठीक है धन्यवाद .. बस स्टैक ओवरफ्लो चट्टानों का कहना है .. !! –

+1

@ लाला त्रिवेदी, आपका स्वागत है – Habib

2

आप मूल्यों/मूल्यों को आसानी से मूल्य से गणना कर सकते हैं। Linq सुविधाओं को सक्रिय करने के लिए आपको बस उचित प्रकार पर डालना होगा।

var sortedOrder = od.Values 
    .Cast<int>()  // this is an enumeration of ints 
    .OrderBy(i => i);; // enumerate through ordered by the value 

foreach (var item in sortedOrder) 
{ 
    // do stuff 
} 
+0

Great..This मदद करने के लिए जा रहा है। AsQueryable() विधि भी करता है। क्या मैं सॉर्टिंग के लिए linq क्वेरी कर सकते हैं। –

+0

'AsQueryable()' संग्रह को केवल 'IQueryable ' के रूप में संग्रहित करता है (जैसा कि 'IEnumerable ' के विपरीत है)। IQueryables स्वीकार करते हैं [LINQ एक्सप्रेशन] (http://msdn.microsoft.com/en-us/library/bb506649.aspx) साथ ही लैम्बडा अभिव्यक्तियों को क्वेरी बनाते समय गतिशील क्वेरी बनाने में आसान बनाते हैं। –

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