2009-03-09 14 views

Respuesta

13

de inicio con SortedDictionary<string,string> o SortedList<string,string> y que está ya allí ...

Si necesita los artículos múltiples por tecla, y luego considerar un SortedDictionary<string,List<string>>. Hay formas de simplificar la adición, etc. con los métodos de extensión; no es necesario que asuste.

Nótese también que NameValueCollection entre mayúsculas y minúsculas, por lo que puede que tenga que utilizar una de las comparaciones insensibles - por ejemplo:

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

(editar) he aquí un ejemplo de la utilización de un método de extensión para poblar múltiples valores en contra de una sola tecla en 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

Aquí un corte fuerza bruta que no estoy demasiado orgulloso, pero funciona si necesita algo rápido y sucio.

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); 
    } 
Cuestiones relacionadas