Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Convert an IOrderedEnumerable<KeyValuePair<string, int>> into a Dictionary<string, int>

I was following the answer to another question, and I got:

// 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's asking for a parameter Func<string, int> keySelector. I tried following a few semi-relevant examples I've found online and put in k => k.Key, but that gives a compiler error:

'System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<string,int>>' does not contain a definition for 'ToDictionary' and the best extension method overload 'System.Linq.Enumerable.ToDictionary<TSource,TKey>(System.Collections.Generic.IEnumerable<TSource>, System.Func<TSource,TKey>)' has some invalid arguments

like image 458
Kache Avatar asked Jun 17 '10 22:06

Kache


1 Answers

You are specifying incorrect generic arguments. You are saying that TSource is string, when in reality it is a KeyValuePair.

This one is correct:

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

with short version being:

sortedDict.ToDictionary(pair => pair.Key, pair => pair.Value); 
like image 127
Rotsor Avatar answered Sep 22 '22 19:09

Rotsor