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);