linq todictionary
¿Cómo convertir IEnumerable de KeyValuePair<x, y> al diccionario? (3)
Esto es lo mejor que pude producir:
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;
}
Comparé la velocidad de conversión de un IEnumerable de 20 millones de pares de valores clave a un Diccionario usando Linq.ToDictionary con la velocidad de este. Éste funcionó en el 80% del tiempo de la versión de Linq. Así que es más rápido, pero no mucho. Creo que realmente necesitas valorar ese ahorro del 20% para que valga la pena usarlo.
¿Hay simplificado para convertir la lista / enumberable de KeyValuePair<T, U>
a Dictionary<T, U>
?
La transformación Linq, la extensión .ToDictionary () no funcionó.
Puede crear su propio método de extensión que funcionaría como espera.
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);
}
}
.ToDictionary(kvp=>kvp.Key,kvp=>kvp.Value);
¿No es mucho más trabajo?