Expresión lambda en ToDictionary

Para convertir una lista a un diccionario, podemos hacerlo fácilmente con lo siguiente:

list.ToDictionary(v=> v, v=>true);

Para el primer parámetro en ToDictionary, puedo entender que el primer parámetro es el elemento del diccionario. Pero que se entiende por v=> true?

El segundo parámetro debe ser del tipo IEqualityComparer. ¿Para qué sirve esto? Como es v=> true mismo como IEqualityComparer?

preguntado el 12 de junio de 12 a las 11:06

3 Respuestas

Este planteamiento de « es el método que se utiliza.

El segundo parámetro (v => verdadero) es el selector de elementos (Una función de transformación para producir un valor de elemento de resultado de cada elemento).

Una lista con los elementos. 1, 2 y 3 daría como resultado un diccionario con el siguiente mapeo (todos los valores son true):

1: true
2: true
3: true

Respondido el 12 de junio de 12 a las 11:06

Un diccionario es como su nombre indica un diccionario se utiliza para buscar un valor con una clave. Si no tiene y no necesita un valor, probablemente sea mucho mejor usar un HashSet - ejecutor

Echa un vistazo a la Documentación de MSDN. Esta es la sobrecarga tomando un segundo IEqualityComparer argumento:

ToDictionary<TSource, TKey>(IEnumerable<TSource>, Func<TSource, TKey>, IEqualityComparer<TKey>)

Sin embargo, en su ejemplo, está utilizando la sobrecarga que toma un Func<TSource, TElement> que se encarga de generar la valores del diccionario:

ToDictionary<TSource, TKey, TElement>(IEnumerable<TSource>, Func<TSource, TKey>, Func<TSource, TElement>)

(En su caso, todos los valores son simplemente true)

Respondido el 12 de junio de 12 a las 11:06

Cuando su lista tiene [1,2,3,4] y la convierte en un diccionario por list.ToDictionary(v=> v, v=>true); entonces tu diccionario tiene estos valores

[1,true]
[2,true]
[3,true]
[4,true].

El primer valor es la clave el segundo es el valor

EDIT:

tal como @dkson dijo que el segundo parámetro es un selector de elementos. Puedes ver esto en intellisense cuando vas a la 3ra de 4 entradas :)

Respondido el 12 de junio de 12 a las 11:06

Sí, pero Intellisense muestra que el segundo elemento en ToDctionary tiene que ser IEqualityComparer - user1240679

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.