Как преобразовать IEnumerable из KeyValuePair <x, y> в словарь?
Есть ли упрощенный способ конвертировать список/перечислимый из KeyValuePair KeyValuePair<T, U> в Dictionary<T, U>?
Преобразование Linq, расширение .ToDictionary() не работает.
Ответ 1
.ToDictionary(kvp=>kvp.Key,kvp=>kvp.Value);
Разве это не намного больше.
Ответ 2
Вы можете создать свой собственный метод расширения, который будет выполняться так, как вы ожидаете.
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);
}
}
Ответ 3
Это лучшее, что я мог бы сделать:
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;
}
Я сравнил скорость конвертации IEnumerable из 20 миллионов пар ключевых значений в словарь с использованием Linq.ToDictionary со скоростью этого. Эта работа выполнялась в 80% случаев версии Linq. Так что это быстрее, но не так много. Я думаю, вам действительно нужно было бы оценить это 20% -ное сохранение, чтобы сделать его полезным.