从单个关系表构建多级数组

时间:2016-11-23 12:04:41

标签: arrays vba excel-vba dictionary excel

我有一个包含两列的excel文件。第一栏(A)有父母,第二栏有孩子(B)。一行有信息,孩子的父母是什么。

Parent  |   Child
1       |   2
1       |   4
1       |   6
2       |   3
4       |   2
4       |   3
3       |   5

我现在想要构建一个具有i树结构的多级数组。 我想要实现的是,我后来想给一个家长(例如2)并收到一个关卡和孩子及其等级的列表。 全球目标应该是:我想知道,如果我移动两个顶级父母,他们是否有类似的孩子?这应该可以从任何级别进行。

1 个答案:

答案 0 :(得分:0)

您没有提供足够的有关您的要求的信息,无法给出明确的答案,所以这里有一些想法。

我对结构的第一次尝试是:

  | Parents | Children |
1 | 2       | 2  4  6  |
2 | 1  2  4 | 1  2  3  |
3 | 2  4    | 5        |
4 | 1       | 2  3     |
5 | 3       |          |
6 | 1       |          |

也就是说,对于每个项目,我都会有一个父母列表和一个孩子列表。我会考虑创建这个结构的努力,并考虑我可以轻松地从这个结构中回答所需的问题。这不是一个难以手动构建的结构,因此不应该是构建宏的困难结构。您想知道两个项目是否具有相同的子项。这可以通过检查这两个项目的子项列表来快速确定。

您需要对此结构的计划用途进行全面审核。但是,目前这种结构看起来令人满意。

在您的表格中,项目的标识符是数字1到6,没有间隙。如果这是真实数据的代表,我可能会定义一个用户类型并将数据保存为数组:

Type utItem
  Parents() As Long
  Children() as Long
End Type

Dim Items() as utItem

如果真正的标识符是字符串或分散的数字,我相信我会去字典。对于每个条目,密钥将是标识符,项目将是一对数组:一个用于父项,一个用于子项。

提案2

附加信息表明这样的结构是您所需要的:

Prnt | D?| Children
 ABC |   | BBC  BBD  FGI  FGJ  KLM 
 STU | D | BBC  BBD  FGI  FGJ  KLM
 GHI | D | BBC  BBD  FGI  FGJ  KLM
 ABD |   | BBC  FGJ
 FGH | D | BBC  FGI  FGJ  KLM
 ABE |   | BBC  FGI  FGJ  KLM

三个字母标识符代表文件名。真正的文件名会更长,但这无关紧要。

对于每个父母,孩子都按字母顺序列出。然后按照父母序列不重要的孩子的标识符对列表进行排序。例如,STU和GHI有相同的孩子。如果列表按子节点排序,那么父节点,GHI行将首先出现。如果GHI行首先是重要的,那么您需要添加此要求。

第二列中的D表示该行与前一行具有相同的子项。

此列表中没有任何内容表明ABC,例如ABC是否有自己的父母或父母。这些信息在构建此列表时可能会有所帮助,但一旦列表完成就不需要它。

您希望将此数据加载到PDM系统。您可以将项目ABC及其子项添加到PDM系统,但不能添加STU,因为它具有相同的子项。我不明白。你不能只忽略项目STU,因为它可能有父母会引用它。

将数据加载到PDM系统将是一次性练习。创建上述结构不可能非常慢,但不一定要快速闪电。例如,五分钟可能是美妙的,四十五分钟是可以接受的,但二十小时是不可接受的。