2009-03-09 15 views

答えて

13

SortedDictionary<string,string>またはSortedList<string,string>でスタートし、その後、SortedDictionary<string,List<string>>を検討し、キーごとに複数のアイテムが必要な場合は...既に存在

です。拡張メソッドを使って追加などを簡単にする方法があります。恐ろしいことである必要はありません。

ということにも注意してくださいNameValueCollectionは大文字と小文字を区別しませんので、あなたは、小文字を区別しない比較のいずれかを使用する必要があるかもしれません - 例えば:

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

(編集)ここでは、複数の値を移入するために拡張メソッドを使用しての例を示します。 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

ここで私はあまりにも誇りに思ってないんだけど、あなたが迅速かつ汚い何かが必要な場合はそれが動作強引なハックです。

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); 
    } 
関連する問題