如何从C#中的Dictionary <string,int =“”>中检索前n个元素?</string,>

时间:2009-05-05 11:40:08

标签: c# dictionary

有没有办法从C#中的Dictionary中检索前n个元素?

5 个答案:

答案 0 :(得分:18)

字典不是本身,你不能依赖“第一”实际含义。来自MSDN:“对于枚举...返回项目的顺序是未定义的。”

您可以使用OrderedDictionary,具体取决于您的平台版本,并且创建自定义后代类词典并不是特别复杂。

答案 1 :(得分:9)

请注意,Dictionary没有明确的排序,因此虽然以下代码将返回n项,但无法保证框架将如何确定要返回的n

using System.Linq;

yourDictionary.Take(n);

上述代码返回包含IEnumerable<KeyValuePair<TKey,TValue>>项的n项。您可以轻松将其转换为Dictionary<TKey,TValue>,如下所示:

yourDictionary.Take(n).ToDictionary();

答案 2 :(得分:7)

你不能真正从Dictionary<TKey,TValue>中获取前N个元素,因为它不是有序集合。所以它真的没有First,Last等概念......但正如其他人所指出的那样,如果你只是想采用N个元素而不管顺序LINQ take函数是否正常工作

var map = GetTheDictionary();
var firstFive = map.Take(5);

答案 3 :(得分:4)

可以使用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
 }

答案 4 :(得分:4)

通常省略对字典的强制转换不起作用:

dictionary = dictionary.Take(n);

这样的简单案例也不会这样:

dictionary = dictionary.Take(n).ToDictionary();

最可靠的方法是显式演员:

dictionary = dictionary.Take(n).ToDictionary(kvp => kvp.Key, kvp => kvp.Value);