在 C# 中,有没有一种方法可以从字典中检索前 n 个元素?
字典本身并没有排序,"第一个"并不一定意味着它是第一个。MSDN上说:"对于枚举...返回的项目顺序是未定义的。"
根据你的平台版本,你可以使用OrderedDictionary,这不是一个特别复杂的事情,只需要创建一个Dictionary的自定义子类即可。
往往省略字典转换会导致无法正常工作:
dictionary = dictionary.Take(n);
而一个简单的案例也不会改变这个事实:
dictionary = dictionary.Take(n).ToDictionary();
最保险的方法是使用显式转换:
dictionary = dictionary.Take(n).ToDictionary(kvp => kvp.Key, kvp => kvp.Value);
请注意,Dictionary
没有明确的排序方式,因此虽然以下代码将返回 n
个项目,但无法保证框架将如何确定返回哪些 n
个项目。
using System.Linq;
yourDictionary.Take(n);
以上代码返回一个包含n个项的IEnumerable<KeyValuePair<TKey,TValue>>
。您可以轻松地将其转换为一个Dictionary<TKey,TValue>
,如下所示:
yourDictionary.Take(n).ToDictionary();
你无法从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
}