Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.59/34: Рейтинг темы: голосов - 34, средняя оценка - 4.59
0 / 0 / 0
Регистрация: 10.11.2015
Сообщений: 24
1

Словарь с несколькими элементами

21.11.2016, 15:59. Показов 6246. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте!

Вопрос такой: может ли быть Dictionary с несколькими Item, там Item1, Item2, Item3

ну в примеру: key ="Вася", Item1="Блондин", Item2="Шофер", Item3="Женат"
key ="Петя", Item1="Брунет", Item2="Олигарх", Item3="Гуляет"

ну и т.д.

т.е. по сути, может ли словарь быть с несколькими элементами под один ключ
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.11.2016, 15:59
Ответы с готовыми решениями:

Не получается вложить словарь в словарь
Друзья, доброго времени суток! Не могу понять, почему у меня не получается вложить словарь в...

Словарь с несколькими значениями
Здравствуйте! Скажите пожалуйста, можно ли реализовать словарь, где будет не пара значений (ключ...

Работа с несколькими элементами управления?
Есть 3 TextBox при изменении текста в одном из них, выполняется код...

Выдвигающаяся панель с несколькими элементами
Привет всем. Долго искал в интернете выдвигающуюся панель несколькими элементами. Она должна быть...

9
6922 / 2832 / 543
Регистрация: 19.10.2012
Сообщений: 8,645
21.11.2016, 16:02 2
Может.
Но итем может быть только один.
Но зато может быть массивом, или удобно когда оно коллекция.
Или другой словарь.

Добавлено через 1 минуту
Примеры:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
Sub PereborFailov() 'коллекция в словаре
    Dim a, i&, t$, Dic As Object
    Dim el, col
    
    a = Range("C3", Cells(Rows.Count, "A").End(xlUp)).Value
    Set Dic = CreateObject("Scripting.Dictionary")
    With Dic
        .CompareMode = 1
        For i = 1 To UBound(a)
            t = a(i, 1)
            If Not .exists(t) Then .Add t, New Collection
            .Item(t).Add a(i, 2) & "|" & a(i, 3) & "|" & i
        Next
    End With
    
    For Each el In Dic.keys
        Debug.Print "Открываем файл " & el
        For Each col In Dic.Item(el)
            Debug.Print "Ищем данные " & col
        Next
        Debug.Print "Закрываем файл " & el
    Next
 
End Sub
 
Sub PereborFailov2() ' словарь в словаре
    Dim a, i&, t$, Dic As Object, Dic2 As Object
    Dim el, col
    
    a = Range("C3", Cells(Rows.Count, "A").End(xlUp)).Value
    Set Dic = CreateObject("Scripting.Dictionary")
    With Dic
        .CompareMode = 1
        For i = 1 To UBound(a)
            t = a(i, 1)
            If Not .exists(t) Then .Add t, CreateObject("Scripting.Dictionary")
            .Item(t).Item(a(i, 2) & "|" & a(i, 3) & "|" & i) = 0&
            
        Next
    End With
    
    For Each el In Dic.keys
        Debug.Print "Открываем файл " & el
        Set Dic2 = Dic.Item(el)
        For Each col In Dic2.keys
            Debug.Print "Ищем данные " & col '& "|" & Dic2.Item(col)
        Next
        Debug.Print "Закрываем файл " & el
    Next
 
End Sub
0
0 / 0 / 0
Регистрация: 10.11.2015
Сообщений: 24
21.11.2016, 16:23  [ТС] 3
Спасибо, понял

Жаль не то что хотелось

думалось что смогу использовать как переменную
0
6922 / 2832 / 543
Регистрация: 19.10.2012
Сообщений: 8,645
21.11.2016, 16:27 4
Ну собирайте в массив и используйте.

Добавлено через 1 минуту
Да и к колекции ведь тоже можно обратиться по индексу.
0
0 / 0 / 0
Регистрация: 10.11.2015
Сообщений: 24
21.11.2016, 16:38  [ТС] 5
коллекция тоже выдаст одно значение по индексу

а неудобство массива в том что надо искать нужный элемент, и только потом можно его использовать
0
6922 / 2832 / 543
Регистрация: 19.10.2012
Сообщений: 8,645
21.11.2016, 16:42 6
Используйте словарь в словаре - там искать не нужно.
Вообще может Вы всё усложняете?
0
0 / 0 / 0
Регистрация: 10.11.2015
Сообщений: 24
21.11.2016, 16:45  [ТС] 7
не исключено

показалось что нашел универсальный инструмент, оказалось нет
0
6922 / 2832 / 543
Регистрация: 19.10.2012
Сообщений: 8,645
21.11.2016, 16:53 8
Ну по крайней мере запросу по теме словарь соответствует.

Добавлено через 3 минуты
Visual Basic
1
2
3
4
5
6
With CreateObject("Scripting.Dictionary")
    .Item("Вася") = Array("Блондин", "Шофер", "Женат")
    For i = 1 To 3
        MsgBox .Item("Вася")(i - 1)
    Next
End With
0
15146 / 6419 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
21.11.2016, 16:59 9
Цитата Сообщение от kwadrad Посмотреть сообщение
неудобство массива в том что надо искать нужный элемент, и только потом можно его использовать
Вы наверно не поняли.
Visual Basic
1
2
Dic.Add "Вася", Array("Блондин", "Шофер","Женат")
Dic.Add "Петя", Array("Брунет", "Олигарх", "Гуляет")
Читать из словаря:
Dic("Вася")(0) - масть, Dic("Вася")(1) - профессия, Dic("Вася")(2) - окольцованность.
Но записывать отдельные элементы массива, находящегося в словаре, не получится - только формировать новый массив и присваивать элементу словаря целиком.
2
6922 / 2832 / 543
Регистрация: 19.10.2012
Сообщений: 8,645
21.11.2016, 17:12 10
Чтоб изменить элемент массива - выгружаете массив в внешний массив, меняете элемент, грузите весь массив назад.

Добавлено через 3 минуты
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Sub tt()
 
With CreateObject("Scripting.Dictionary")
 
    .Item("Вася") = Array("Блондин", "Шофер", "Женат")
    
    For i = 1 To 3
        MsgBox .Item("Вася")(i - 1)
    Next
    
    Arr = .Item("Вася")
    Arr(0) = "Блондин, но крашеный"
    Arr(2) = "Холост"
    .Item("Вася") = Arr
    
     For i = 1 To 3
        MsgBox .Item("Вася")(i - 1)
    Next
   
End With
 
End Sub
1
21.11.2016, 17:12
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.11.2016, 17:12
Помогаю со студенческими работами здесь

Чтение XML с несколькими корневыми элементами
<data><kategory> <item><KOD_KATEGORY>26</KOD_KATEGORY> <NAME_KATEGORY>Planch_pk</NAME_KATEGORY> ...

Реализовать функцию, которая будет возвращать словарь с 10 элементами
реализовать функцию, которая будет возвращать словарь с 10 элементами, где ключ int, а значение -...

Работа между несколькими Пользовательскими элементами управления
Прошу помочь решить проблему. Суть проблемы заключается в том, как работать между двумя элементами...

Добавление данных в XML файл с несколькими родительскими элементами
Есть xml файл <?xml version="1.0" encoding="windows-1251" standalone="yes"?> <NewDataSet> ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru