2009-08-06 5 views
1

キーオブジェクトのマップを値オブジェクトのコレクションに保存する最適な方法は何ですか?
私はエレガントなやり方Dictionary <Key、Collection <Value>>

Dictionary<KeyType, Collection<ValueType>> 

を使用することができますが、そのアプローチは、ハウスキーピングの多くが関与する傾向があり、そしてコードアップクラッタ。

ルックアップタイプはほとんど私が探している結果ですが、変更不可能であり、コンストラクタはありません。私は独自のカスタムクラスを作成することができますが、それはフレームワークどこかに存在するはずです。

+0

残念ながら、.NETは多少限定されています。 – Thorarin

+0

http://stackoverflow.com/questions/380595/multimap-in-c-3-0 – Jimmy

答えて

5

これはあなたの最善の答えです。 Dictionary<KeyType, ICollection<ValueType>>を使用するのはかなり一般的です。 varキーワードを使用してローカル変数を宣言するのが最適な方法です。

それ以外は、MultiDictionary<T,K>タイプを作成することのみが可能です。あなたはそれをLookupと呼んで、自分の名前空間に入れることもできますか?

編集:Googleは、既存の実装についてこれを見てください:Multi-value Dictionary C# source code (.NET 3.5)。 BSD2ライセンスは、あなたが帰属している商用アプリに使用できることを意味します。 :)

4

また、特定のジェネリック型別名片付けのためのようでした:

using MultiDictionary = Dictionary<string, ICollection<int>>; 

そして、それ以降:.NET 3.5では

var foo = new MultiDictionary(); 
+0

パートIこれについては気にしないでください。一般的なエイリアスはできませんし、ソースファイル間で一貫性を保つのは難しいです。幸いにもFind All Referencesを破ることはありません。 –

2

、これを提供していますILookup<Tkey,TValue>Lookup<TKey,TValue>があります目的;ただし、デフォルトの実装は不変です。私はMiscUtilの変種を書きました。 EditableLookup<TKey,TValue> - これはまさにあなたが望むものです。

関連する問題