Страницы: 1
RSS
VBA. Добавление массива в словарь.
 
Доброго всем дня!

Мне нужно сделать словарь, значения в котором будут в виде массивов.

Принцип такой. Через цикл у меня формируется массив данных. Полученный массив нужно внести в словарь по ключу.
Потом, по ключу словаря у мне нужно будет получить доступ к массиву данных.

Проблема в том, что в словарь записывается только ключ, без данных.

Т.е. при вызове arr_coord.Item(key)(i) - у меня получается пустое значение.

Так же я пробовал записывать в значения не только массивы, но и простые данные - все равно, значение по ключу потом пустое.

Что я делаю не так?

Ниже пример кода:
Код
Public arr_coord As Dictionary ' словарь, в котором ключ - уникальное значение из обрабатываемого массива _
                                , значение - координаты уникального значения в обрабатываемом массиве
Dim arr_tmp() As String 'массив с координатами уникального значения
Dim count&

Public Function Arr_init(arr() As String) As String

    ReDim arr_tmp(1 To UBound(arr()))
    
    For i = 1 To UBound(arr())
    
        If arr_coord.Exists(arr(i)) = False Then ' добавляю уникальное значение в словарь
        
            count = 1
            
            For i2 = i To UBound(arr())  'поиск координат уникального значения в массиве
            
               If arr(i2) = arr(i) Then
               
                    ReDim Preserve arr_tmp(1 To count)
                    arr_tmp(count) = i2
                    count = count + 1
               
               End If
            
            Next i2
            
            arr_coord.Add arr(i), arr_tmp() 'добавляю уникальное значение в словарь и массив его координат в обрабатываемом массиве
            
         End If
    
    Next i


End Function
 
Доброго.
Так нельзя получать данные
Цитата
arr_coord.Item(key)(i)
так надо.
a=arr_coord.Item(key)
x=a(0)
Можно так заполнять словарь.
Код
Public Function Arr_init(arr() As String) As Dictionary
    Dim count&
    Dim arr_tmp(), arr_coord As Dictionary
   set arr_coord = new Dictionary

    For i = 1 To UBound(arr())

        If Not arr_coord.Exists(arr(i)) Then  ' добавляю уникальное значение в словарь
            arr_coord.Item(arr(i)) = Array(i)
        Else
            arr_tmp = arr_coord.Item(arr(i))
            count = UBound(arr_tmp) + 1
            ReDim Preserve arr_tmp(count)
            arr_tmp(count) = i
            arr_coord.Item(arr(i)) = arr_tmp
        End If

    Next i

    Set Arr_init = arr_coord
End Function
Изменено: doober - 13.01.2022 10:50:38
 
Василий Тонкокшуров, здравствуйте
Вот так можно добавлять массивы и получать к ним доступ по ключу
Исчерпывающее описание объекта Dictionary
Изменено: Jack Famous - 13.01.2022 10:56:25
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
doober,

Спасибо,

Ваше решение помогло :-)
Изменено: Василий Тонкокшуров - 13.01.2022 17:52:48
 
Василий Тонкокшуров,

ЗАЧЕМ

ПИСАТЬ

ЧЕРЕЗ

ПУСТУЮ

СТРОКУ

КАЖДОЕ

ПРЕДЛОЖЕНИЕ?!

Абзацы - такое понятие Вам знакомо? Приведите в порядок свои сообщения.

Помощь скрыта до устранения замечания
Страницы: 1
Наверх