Sub dddd()
Dim dic As New dictionary
Set dic = New dictionary
dic(123) = "Сто двадцать три"
dic(234) = "Двести тридцать четыре"
dic(345) = "Тристо сорок пять"
MsgBox dic.Keys(2) 'узнать ключ по порядковому номеру
MsgBox dic.Items(2) 'узнать значение по порядковому номеру
MsgBox dic(345) 'узнать значение по ключу
End Sub
Можно ли без цикла узнать: 1) Ключ по значению? 2) Порядковый номер по ключу? 3) Порядковый номер по значению?
нет. Реализация словаря вообще не предполагает какой-то вменяемой индексации. Иначе говоря, получив индекс для ключа один раз, во второй раз для этого же ключа индекс может быть другим.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Бахтиёр, здравствуйте Не dic.Keys(3), как в массивах, а dic.Keys()(3) Читайте матчасть — это лучшее, что есть по словарям
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Но в этом лучшем не написано то, про что выше говорил Дмитрий. И более того исходя из этого там есть потенциальные ошибки, например в описании выгрузки из словаря.
Hugo, я не отменял слов Димы)) Никто не мешает мгновенно получить из словаря одномерный массив всех ключей или элементов и работать с этим массивом в привычном режиме (с индексами и т.д.)
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Я говорю про другое - нет связи между ключом и итемом по индексу словаря. Помню где-то в доках это видел, но не могу сейчас найти. Нигде в оф.описаниях этот момент вообще никак не освещается
Jack Famous написал: Никто не мешает мгновенно получить из словаря одномерный массив всех ключей или элементов и работать с этим массивом в привычном режиме (с индексами и т.д.)
Алексей, мгновенно не получится, там столько операций, удивитесь (обход словаря, выделение памяти, копирование в массив и т.д.) Плюс работа с массивом в некоторых операциях медленнее словаря. Ибо тогда зачем бы он понадобился? Это совсем разные сущности.
Hugo, Индекс не гарантирует положение - Дима уже сказал, я с этим не спорил bedvit, когда нужно? Для сортировки ключей или элементов словаря, например Не мгновенно? Получить 100 тыс ключей из словаря - 0 мс, до меня это мгновенно, а большее количество ключей начинает сильно грузить словарь
UPD: 0 мс - для целочисленных ключей от 1 до 100 тыс и 23 мс, если к этому числу прицепить строку 150 символов
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Sub dddd()
Dim dic, keys
Set dic = CreateObject("Scripting.Dictionary")
dic(123) = "Сто двадцать три"
keys = dic.keys
MsgBox keys(0)
'MsgBox dic.keys(0)
End Sub
Бахтиёр, для первого варианта: 1. Удалите строку 3 или строку 2 пишите без New 2. Как обратиться по индексу я уже писал, а вам чихать — MsgBox dic.Keys()(0)
Мы все тут уже давно не по теме беседуем, так что либо заканчивайте, либо предлагайте новое название для темы Ответ на существующий вопрос: никак
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄