values recorrer example c# linq todictionary

example - recorrer dictionary string string c#



Convierte un IOrderedEnumerable<KeyValuePair<string, int>> en un Dictionary<string, int> (3)

Creo que la forma más limpia de hacer las dos cosas juntas: clasificar el diccionario y convertirlo de nuevo en un diccionario sería:

itemCounter = itemCounter.OrderBy(i => i.Value).ToDictionary(i => i.Key, i => i.Value);

Estaba siguiendo la respuesta a otra pregunta , y obtuve:

// itemCounter is a Dictionary<string, int>, and I only want to keep // key/value pairs with the top maxAllowed values if (itemCounter.Count > maxAllowed) { IEnumerable<KeyValuePair<string, int>> sortedDict = from entry in itemCounter orderby entry.Value descending select entry; sortedDict = sortedDict.Take(maxAllowed); itemCounter = sortedDict.ToDictionary<string, int>(/* what do I do here? */); }

Visual Studio está pidiendo un parámetro Func<string, int> keySelector . Traté de seguir algunos ejemplos semi-relevantes que encontré en línea y poner en k => k.Key , pero eso da un error de compilación:

''System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<string,int>>'' no contiene una definición para ''ToDictionary'' y la mejor sobrecarga del método de extensión ''System.Linq.Enumerable.ToDictionary<TSource,TKey>(System.Collections.Generic.IEnumerable<TSource>, System.Func<TSource,TKey>)'' tiene algunos argumentos inválidos


Está especificando argumentos genéricos incorrectos. Usted dice que TSource es una cadena, cuando en realidad es un KeyValuePair.

Este es correcto:

sortedDict.ToDictionary<KeyValuePair<string, int>, string, int>(pair => pair.Key, pair => pair.Value);

con la versión corta siendo:

sortedDict.ToDictionary(pair => pair.Key, pair => pair.Value);


La pregunta es demasiado antigua, pero aún me gustaría dar una respuesta para referencia:

itemCounter = itemCounter.Take(maxAllowed).OrderByDescending(i => i.Value).ToDictionary(i => i.Key, i => i.Value);