有没有办法从C#中的Dictionary中检索前n个元素?
答案 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);