リストを使用する最良の方法< T>キー/値コレクションにありますか?

StackOverflow https://stackoverflow.com/questions/416454

質問

キーがIDで値がT型のコレクションであるキー/値の状況でコレクションオブジェクト(例ではリスト)を保持する最良の方法は何ですか?

これが唯一のオプションですか、それとも.NET 3.5のより良いソリューション/別のコレクションがありますか?

var x = new Dictionary<int, List<type>>();
役に立ちましたか?

解決

これは良い解決策であり、非常にうまく機能します-{key = int、value = 4 byte reference}の辞書オブジェクトを効果的に使用しています。

キーで値を取得すると、ヒープ上の List&lt; T&gt; への参照が返され、使用できるようになります。これは、明らかな問題に対する非常に効率的でコンパクトなソリューションになります。

他のヒント

これがあなたが必要とするものであるかどうかはわかりませんが、私はそれをチョップします。

public Dictionary<int,List<T>> myFunction<T>()
{
    var returnvalue = new Dictionary<int,List<T>>();
    //Do some stuff with the collection.
    return returnvalue;
}

これを呼び出すことができます

public void Main()
{
  var functionreturn = myFunction<String>();
}

これが役立つかどうかはわかりませんが、質問の書き直しに役立つ場合があります。

注:上記はエアコードであり、テストされていません。

フレームワーク内に何かはないと思いますが、PowerCollectionsライブラリにはMultiDictionaryコレクションがあると思います。試してみてください。

おそらく、ニーズに応じてラッパークラスを作成する必要があると思います。あらかじめ作成されたリストの辞書を保存する必要がある場合、プライベートプロパティのみである限り、 Dictionary&lt; int、List&lt; type&gt;&gt; は問題ありません。明らかに多くの情報を公開し、 IDictionary&lt; int、IList&lt; T&gt;&gt; または共分散がないために類似したものにキャストできないため、公開するべきではありません。

あなたの最善の策は次のようなものです:

class MyWrapper<T>()
{
    private Dictionary<int, List<T>> dictionary { get; set; }
    public MyWrapper() { dictionary = new Dictionary<int, List<T>>(); }

    // Adds a new item to the collection
    public void Add(int key, T item)
    {
       List<T> list = null;
       if (!dictionary.TryGetValue(key, out list))
       {
          // If dictionary does not contain the key, we need to create a new list
          list = new List<T>();
          dictionary.Add(key, list);
       }
       list.Add(item);
    }

    public IEnumerable<T> this[int key]     
    {
       get
       {
           List<T> list = null;
           // We just return an empty list if the key is not found
           if (!dictionary.TryGetValue(key, out list)) return new List<T>();
           else return list;
       }
    }
}

明らかに、ニーズは異なる場合があり、いくつかのインターフェイスを実装する必要がある場合などがありますが、これは一般的な考え方です。

複数の値を持つ辞書、つまり各キーが複数の値を持つことができるキー付きコレクションを探していますか? PowerCollections にはそのようなMultiDictionaryがあります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top