如何从Dictionary< string,int>中检索前n个元素?在C#?
-
05-07-2019 - |
题
有没有办法从C#中的Dictionary中检索前n个元素?
解决方案
请注意, Dictionary
没有明确的排序,所以尽管以下代码将返回 n
项,但无法保证框架将如何确定哪个 n
要返回的项目。
using System.Linq;
yourDictionary.Take(n);
上述代码返回包含 n
项的 IEnumerable< KeyValuePair< TKey,TValue>>
。您可以轻松地将其转换为 Dictionary< TKey,TValue>
,如下所示:
yourDictionary.Take(n).ToDictionary();
其他提示
字典不是本身订购的,您不能依赖于“第一”字典。实际上意味着。来自MSDN:“对于枚举...返回项目的顺序是未定义的。”
您可以使用 OrderedDictionary 取决于您的平台版本,并且创建自定义后代类词典并不是特别复杂。
您无法从 Dictionary< TKey,TValue>
中获取前N个元素,因为它不是有序集合。所以它真的没有First,Last等概念......但正如其他人所指出的那样,如果你只想采用N个元素而不管顺序LINQ take函数是否正常工作
var map = GetTheDictionary();
var firstFive = map.Take(5);
可以使用Linq吗?
var dictionary = new Dictionary<string, int>();
/// Add items to dictionary
foreach(var item in dictionary.Take(5))
{
// Do something with the first 5 pairs in the dictionary
}
通常省略对字典的强制转换不起作用:
dictionary = dictionary.Take(n);
这样的简单案例也不会这样:
dictionary = dictionary.Take(n).ToDictionary();
最可靠的方法是显式演员:
dictionary = dictionary.Take(n).ToDictionary(kvp => kvp.Key, kvp => kvp.Value);
不隶属于 StackOverflow