Как сопоставить дубликаты элементов для дубликатов ключей - PullRequest
0 голосов
/ 11 февраля 2019

Первый вопрос по StackOverflow, скажите, пожалуйста, как его улучшить.Также новичок в программировании, поэтому проблема может быть простой, мне потребовалось несколько часов, чтобы решить

У меня есть два столбца, содержащихся в таблице, столбец X и столбец Y. Столбец X содержит ключи, столбец Yсодержит предметыСтолбцы связаны строкой.Элемент в строке Z в Y должен быть сопоставлен с ключом в той же строке в X. Может быть более одного уникального элемента на ключ, но только один уникальный ключ на элемент.Все значения в обоих столбцах встречаются неизвестное количество раз.Задача состоит в том, чтобы создать эффективное сопоставление, которое обеспечивает легкий доступ ко всем уникальным элементам, соответствующим определенному ключу.

Пожалуйста, ознакомьтесь с моим решением ниже.Функция называется teamgroup и является частью более крупной программы, поэтому есть входные данные от других функций.Что не было включено в мой код, так это то, что таблица отсортирована по столбцу X, а уникальные ключи из столбца X хранятся в отдельном массиве keys.IsInArray также является отдельной функцией.

'Set keys
For i = 1 To UBound(keys)

    With dict

        .Add keys(i, 1), tmp

    End With

Next i

'Group values by key
For Each kee In dict.keys

    For i = 2 To lastrow

        If kee = tbl.Range(i, keycol).Value Then

            If IsInArray(tbl.Range(i, itemcol).Value, dict.Item(kee)) Then

            Else
                ReDim Preserve tmp(1 To UBound(tmp) + 1)
                tmp(UBound(tmp)) = tbl.Range(i, itemcol).Value
                dict.Remove (kee)
                dict.Add (kee), tmp
            End If

        Else

        End If

    Next i

    ReDim tmp(0)

Next

Set teamgroup = dict

End Function

Данные выглядят следующим образом:

 X     Y
 56     6070
 56     6070
 55     6021
 55     6024
 56     6054
 0      6050

Не существует требуемой формы вывода, но она должна обеспечивать легкий доступ к элементам.сопоставлен с конкретным ключом.Я считаю, что словарь является хорошим инструментом для этого.В этом случае ввод «56» должен выводить массив или аналогичный, содержащий 6070 и 6054.

Конечный результат кода my - это словарь с уникальными ключами, сопоставленными с элементамисодержащий массивы с уникальными значениями из столбца Y.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...