2009-03-09 2 views

Antwort

13

beginnen mit SortedDictionary<string,string> oder SortedList<string,string> und Sie sind schon da ...

Wenn Sie die mehrere Artikel pro Schlüssel benötigen, dann eine SortedDictionary<string,List<string>> betrachten. Es gibt Möglichkeiten, die Erweiterung mit Erweiterungsmethoden zu vereinfachen - es muss nicht beängstigend sein.

Beachten Sie auch, dass NameValueCollection ist Groß- und Kleinschreibung, so dass Sie möglicherweise eine der unempfindlichen Vergleiche verwenden müssen - zum Beispiel:

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

(edit) hier ist ein Beispiel eine Verlängerung Methode der Verwendung von mehreren Werten zu füllen gegen einen einzelnen Schlüssel in C# 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

Hier ist ein Brute-Force-Hack, den ich nicht zu stolz bin, aber es funktioniert, wenn Sie etwas schnell und schmutzig brauchen.

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); 
    } 
Verwandte Themen