Как получить ключ OrderedDict по заданному индексу?

#c# #dictionary #collections #icollection

#c# #словарь #Коллекции #іколлекция #icollection

Вопрос:

Похоже, я не могу найти быстрое решение для, казалось бы, простой проблемы: у меня есть C # OrderedDict и, используя предварительные знания о порядке, хочу получить ключ в определенной позиции.

OrderedDict.Keys возвращает ICollection объект, но я не смог найти простой способ получить элемент в определенной позиции.

На данный момент я решил это, создав список в foreach цикле, используя .Keys и индексируя его, но мне это не кажется элегантным.

Исходя из Python, я в основном ищу list(someOrderedDict.keys())[index] эквивалент. Есть ли что-то подобное в C #?

Комментарии:

1. индекс будет key … Словари предназначены для использования с ключами.

2. OP хочет получить ключ , а не значение — может быть (DictionaryEntry(myDict[index])).Key ?

3. Насколько я понял, myDict[index] извлекает Value , а не a DictionaryEntry . msdn.microsoft.com/en-us/library/ms132598.aspx

4. Вы должны быть в состоянии сделать orderedDictionary.Cast<DictionaryEntry>().ElementAt(index);

5. .Cast необходим System.Linq . Но даже тогда у .Cast<DictionaryEntry>() нет ElementAt() метода. Мне не хватает другого using …`?

Ответ №1:

Если это OrderedDictionary вы имеете в виду, что нет элегантного способа написать свой собственный класс. Наиболее элегантный способ (возможно, не эффективный) использования OrderedDictionary потенциально:

 var key = orderedDictionary.Keys.OfType<object>().Skip(index).First();