#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
, а не aDictionaryEntry
. msdn.microsoft.com/en-us/library/ms132598.aspx4. Вы должны быть в состоянии сделать
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();