web-dev-qa-db-ja.com

KeyValuePair <x、y>のIEnumerableを辞書に変換する方法は?

KeyValuePair<T, U>のリスト/無数をDictionary<T, U>に変換する合理化された方法はありますか?

Linq変換、.ToDictionary()拡張子が機能しませんでした。

26
Nenad
.ToDictionary(kvp=>kvp.Key,kvp=>kvp.Value);

それほど多くの作業ではありません。

57

期待どおりに機能する独自の拡張メソッドを作成できます。

public static class KeyValuePairEnumerableExtensions
{
    public static Dictionary<TKey, TValue> ToDictionary<TKey, TValue>(this IEnumerable<KeyValuePair<TKey, TValue>> source)
    {
        return source.ToDictionary(item => item.Key, item => item.Value);
    }
}
10
JG in SD

これは私が作り出すことができる最高のものです:

public static IDictionary<TKey, TValue> ToDictionary<TKey, TValue>(IEnumerable<KeyValuePair<TKey, TValue>> keyValuePairs)
{
    var dict = new Dictionary<TKey, TValue>();
    var dictAsIDictionary = (IDictionary<TKey, TValue>) dict;
    foreach (var property in keyValuePairs)
    {
        (dictAsIDictionary).Add(property);
    }
    return dict;
}

2,000万のキー値ペアのIEnumerableをLinq.ToDictionaryを使用して辞書に変換する速度を、この速度と比較しました。これは、Linqバージョンの80%の時間で実行されました。したがって、高速ですが、それほど多くはありません。使用する価値があるようにするには、その20%の節約を本当に評価する必要があると思います。

1
Geoff