2009-03-09 14 views
7

मैं कुंजी के आधार पर NameValueCollection को सॉर्ट करने का एक आसान तरीका ढूंढ रहा हूं - हालांकि यह एक प्रदर्शन भारी नहीं होना चाहिए।क्या सी # में कुंजी के आधार पर NameValueCollection को सॉर्ट करने का कोई आसान तरीका है?

उत्तर

13

SortedDictionary<string,string> या SortedList<string,string> से आरंभ करें और आप पहले से ही कर लिया है ...

आपको प्रति कुंजी से अधिक आइटम की जरूरत है, तो एक SortedDictionary<string,List<string>> पर विचार करें। एक्सटेंशन विधियों के साथ अतिरिक्त आदि को सरल बनाने के तरीके हैं - इसे डरावना नहीं होना चाहिए।

भी ध्यान रखें कि NameValueCollection केस-संवेदी है, तो आप असंवेदनशील तुलना में से एक का उपयोग करने के लिए आवश्यकता हो सकती - उदाहरण के लिए:

Dictionary<string,string> data = new Dictionary<string,string>(
      StringComparer.InvariantCultureIgnoreCase); 

(संपादित) यहाँ एक विस्तार विधि का उपयोग कर एकाधिक मान भर का एक उदाहरण है सी # 3.0:

static void Main() 
    { 
     var data = new Dictionary<string, List<string>>(
      StringComparer.InvariantCultureIgnoreCase); 
     data.Add("abc", "def"); 
     data.Add("abc", "ghi"); 
    } 

    static void Add<TKey, TValue>(this IDictionary<TKey, List<TValue>> lookup, 
     TKey key, TValue value) 
    { 
     List<TValue> list; 
     if (!lookup.TryGetValue(key, out list)) 
     { 
      list = new List<TValue>(); 
      lookup.Add(key, list); 
     } 
     list.Add(value); 
    } 
2

यहां एक क्रूर बल हैक है कि मुझे बहुत गर्व नहीं है, लेकिन अगर आपको कुछ जल्दी और गंदे की ज़रूरत है तो यह काम करता है।

public static void Sort(this NameValueCollection nameValueCollection) 
    { 
     // Create a temporary collection the same size as the original 
     NameValueCollection tempNameValueCollection = new NameValueCollection(nameValueCollection.Count); 

     // Sort the keys 
     string[] keys = nameValueCollection.AllKeys; 
     Array.Sort(keys); 

     foreach (string key in keys) 
     { 
      // Sort the values 
      string[] values = nameValueCollection[key].Split(','); 
      Array.Sort(values); 

      // Add each value to the temporary collection 
      foreach (string value in values) 
      { 
       tempNameValueCollection.Add(key, value); 
      } 
     } 

     // Clear the original collection 
     nameValueCollection.Clear(); 

     // Add the sorted entries back 
     nameValueCollection.Add(tempNameValueCollection); 
    } 
संबंधित मुद्दे

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