Как я могу получить первые n элементов из словаря < string, int > в C #?
-
05-07-2019 - |
Вопрос
Есть ли способ извлечь первые n элементов из словаря в C #?
Решение
Обратите внимание, что для Dictionary
явного упорядочения не существует, поэтому, хотя следующий код возвратит элементы n
, нет никакой гарантии относительно того, как среда определит, какой n
элементов для возврата.
using System.Linq;
yourDictionary.Take(n);
Приведенный выше код возвращает IEnumerable < KeyValuePair < TKey, TValue > <> code>, содержащий элементы
n
. Вы можете легко преобразовать это в словарь < TKey, TValue >
следующим образом:
yourDictionary.Take(n).ToDictionary();
Другие советы
Словари не упорядочены как таковые , вы не можете полагаться на " первую " на самом деле это означает. Из MSDN: " Для перечисления ... Порядок, в котором возвращаются элементы, не определен. & Quot;
Вы можете использовать OrderedDictionary в зависимости от версии вашей платформы, и это не очень сложная вещь для создания в качестве пользовательского класса-потомка Dictionary.
Вы не можете взять первые N элементов из Dictionary < TKey, TValue >
, потому что это не упорядоченная коллекция. Так что в действительности он не имеет понятия 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
}
Часто опускание приведения к словарю не работает:
dictionary = dictionary.Take(n);
И ни один простой случай не будет таким:
dictionary = dictionary.Take(n).ToDictionary();
Самый надежный метод - явное приведение:
dictionary = dictionary.Take(n).ToDictionary(kvp => kvp.Key, kvp => kvp.Value);