如何从Dictionary< string,int>中检索前n个元素?在C#?

StackOverflow https://stackoverflow.com/questions/824494

  •  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);
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top