Как я могу получить первые 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);