Как я могу получить первые n элементов из словаря в C#?

есть ли способ получить первые n элементов из словаря в C#?

5 ответов


обратите внимание, что нет явного заказа для Dictionary, поэтому, хотя следующий код будет возвращать n элементы, нет никакой гарантии относительно того, как структура определит, какой n предметы для возврата.

using System.Linq;

yourDictionary.Take(n);

приведенный выше код возвращает IEnumerable<KeyValuePair<TKey,TValue>> С n предметы. Вы можете легко преобразовать это в Dictionary<TKey,TValue> вот так:

yourDictionary.Take(n).ToDictionary();

словари не упорядочены per se, вы не можете полагаться на "первый" на самом деле это означает. Из MSDN: "для перечисления... Порядок, в котором возвращаются элементы, не определен."

вы можете использовать OrderedDictionary в зависимости от вашей версии платформы, и это не особенно сложная вещь для создания в качестве пользовательского класса потомка словаря.


вы не можете взять первые N элементов из A Dictionary<TKey,TValue> потому что это не упорядоченная коллекция. Таким образом, он действительно не имеет понятия о первом, последнем и т. д... Но, как указывали другие, если вы просто хотите взять 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);