web-dev-qa-db-ja.com

辞書をリストに変換する<KeyValuePair>

KeyValuePairのリストをディクショナリに変換できることは知っていますが、その逆の操作をすばやく(手動でループする以外に)実行する方法はありますか?

これは手動の方法です。

foreach (KeyValuePair<double,double> p in dict)
{
    list.Add(new KeyValuePair<double,double>(p.Key,p.Value));
}

それほど悪くはありませんが、興味がありました。

47
Sean

Dictionary<TKey, TValue>List<KeyValuePair<TKey, TValue>>に変換するには、単に言うことができます

var list = dictionary.ToList();

またはより冗長

var list = dictionary.ToList<KeyValuePair<TKey, TValue>>();

これは、Dictionary<TKey, TValue>IEnumerable<KeyValuePair<TKey, TValue>>を実装しているためです。

110
jason

Linqの使用:

myDict.ToList<KeyValuePair<double, double>>();

辞書要素areKeyValuePairアイテム。

8
Oded

ジェイソンが言ったように。ただし、実際にリストが必要ない場合は、このインターフェイスを実装するため、ICollection <TKey、TValue>にキャストできますが、一部は明示的にのみです。このメソッドは、リスト全体をコピーするのではなく、同じ辞書インスタンスを再利用するだけなので、パフォーマンスが向上します。

5
fejesjoco

IDictionaryであるException.Dataのインスタンスを列挙しようとしています。これが最終的に機能したものです:

    ICollection keys = idict.Keys;
    foreach(var key in keys)
    {
       var value = idict[key];
       Console.WriteLine("{0}: {1}", key, value);
    }
0
Schwarrior

.NET 2.0の場合:

Dictionary<TKey, TValue> dictionary = new Dictionary<TKey, TValue>();
List<KeyValuePair<TKey, TValue>> myList = new List<KeyValuePair<TKey, TValue>>(dictionary);
0
Daniel Bogdan