繁体   English   中英

将IOrderedEnumerable <KeyValuePair <string,int >>转换为Dictionary <string,int>

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

我正在关注另一个问题答案 ,我得到了:

// 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要求参数Func<string, int> keySelector 我尝试了一些我在网上找到的半相关示例并放入k => k.Key ,但这会产生编译错误:

'System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<string,int>>'不包含'ToDictionary'的定义和最佳扩展方法重载'System.Linq.Enumerable.ToDictionary<TSource,TKey>(System.Collections.Generic.IEnumerable<TSource>, System.Func<TSource,TKey>)'有一些无效的参数

您正在指定不正确的通用参数。 你说TSource是字符串,实际上它是KeyValuePair。

这个是正确的:

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

短版本是:

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

我相信最简洁的方法:将字典排序并将其转换回字典将是:

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

这个问题太旧了,但还是想给出答案供参考:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM