Страницы: 1
RSS
Как программно прочитать ключ словаря по значению словаря?
 
Добрый день.
Код
Sub dd()
Dim o As Object
Set o = CreateObject("Scripting.Dictionary")
o(1) = "Один"
MsgBox o(1)
End Sub
Так можно прочитать значение словаря ("Один") по ключу словаря (1).

А как сделать наоборот?
Как прочитать ключ словаря по значению словаря?
 
Сделать два словаря.
 
Только перебором всех ключей и их значений. Но и тут надо понимать - ключ уникален, значение - нет. А значит может существовать возможность получения неверного ключа, если разным ключам сопоставлено одно значение.
Позвольте поинтересоваться - а зачем?
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Про Словарь, п.8.3.
Согласие есть продукт при полном непротивлении сторон
 
Grr, спасибо.

Дмитрий, спасибо за подробный ответ.
Цитата
The_Prist написал:
Позвольте поинтересоваться - а зачем?
Сразу сказать сложно, наверно попозже создам отдельную тему.
 
Sanja, спасибо, отличная справка.
 
Код
Sub dd()
Dim o As Object
Set o = CreateObject("Scripting.Dictionary")
o(1) = "Один"
MsgBox o.keys()(0)
End Sub

А ведь MsgBox o.keys(0) вернёт ошибку.
Цитата
Из справки:
Обратите внимание на синтаксис!    Наиболее неожиданно тут то, что после Keys надо использовать пустые скобки
Классно.
Sanja, ещё раз спасибо.
Изменено: Бахтиёр - 05.07.2016 10:15:50
 
Цитата
Бахтиёр написал:
Sanja , ещё раз спасибо.
кстати, где-то я читал что microsoft не гарантирует строгий порядок в этих ключах и значениях.
И кстати ту статью можно оптимизировать, например выгрузку:
Код
[A1].Resize(.Count, 2) = Application.Transpose(Array(.Keys, .Items))
но раз порядок не гарантирован - то это чревато...
Изменено: Hugo - 05.07.2016 10:27:55
 
Игорь, соглашусь. Куда надежнее создать отдельный массив, пройтись циклом по ключам и записать все в строгом соответствии. По времени не сильно потеряем, а вот по точности данных - выиграем 100% :)
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Понятно, спасибо.
 
Цитата
Бахтиёр написал: Сразу сказать сложно
ключ по значению? (нюансы в #3)
можно:
- значение вставить в ключ на этапе сборки словаря - создать составной ключ! - но всё равно вытягивать из словаря по значению (ключа), а не по номеру item'а в словаре - логичнее (иначе зачем создавать словарь? чтобы не пользоваться его преимуществами обращения по названию ключа? а снова считать поштучно, как в простом массиве?)
- делать словарь в словаре - опять же искомое значение, загоняя ключом 2-го словаря (который от ключа 1-го словаря)
...  :) лучше сразу применить, что удобнее, чем сказать на все случаи жизни...  
Изменено: JeyCi - 05.07.2016 11:12:07
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
Если такое предвидится - сразу нужно делать или словарь на все случаи, или два словаря - пары ключ/значения и пары значение_как_ключ/коллекция_ключей_где_ключ_как_ключ :)
Проще чтоб не путаться сделать два словаря.
Страницы: 1
Читают тему
Наверх