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

bun*_*ale 8 c# dictionary

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

ann*_*ata 17

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

您可以根据平台版本使用OrderedDictionary,并且创建Dictionary的自定义后代类并不是特别复杂.


Luk*_*keH 9

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

using System.Linq;

yourDictionary.Take(n);
Run Code Online (Sandbox Code Playgroud)

上面的代码返回一个IEnumerable<KeyValuePair<TKey,TValue>>包含n项目.您可以轻松地将其转换为Dictionary<TKey,TValue>如此:

yourDictionary.Take(n).ToDictionary();
Run Code Online (Sandbox Code Playgroud)


Jar*_*Par 6

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

var map = GetTheDictionary();
var firstFive = map.Take(5);
Run Code Online (Sandbox Code Playgroud)


Chr*_*uer 6

通常,省略强制转换为字典是行不通的:

dictionary = dictionary.Take(n);
Run Code Online (Sandbox Code Playgroud)

这样的简单情况也不会:

dictionary = dictionary.Take(n).ToDictionary();
Run Code Online (Sandbox Code Playgroud)

最可靠的方法是显式转换:

dictionary = dictionary.Take(n).ToDictionary(kvp => kvp.Key, kvp => kvp.Value);
Run Code Online (Sandbox Code Playgroud)

  • 这可能是最好的答案,需要进行投票 (2认同)