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

StackOverflow https://stackoverflow.com/questions/824494

  •  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);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top