📖 功能概述
输入一组文本信息(如序号、物料编码、颜色名称等),组件内置 ObjectGrouper 引擎对这些信息进行自动分类——将相同文本值的条目归为一组。
分类结果以树形结构输出:每条原始文本信息的字符串作为分组名称,每个分组对应一条新分支。
核心亮点在于动态端口扩展:输入端连接新的数据流后,输出端会自动生成对应的分组输出——每个数据流都会根据相同的分组规则,将其数据同步分配到对应分组中。
支持 IGH_VariableParameterComponent 接口,输入端可从第 3 个端口起动态增加。
🧠 核心算法:智能分组引擎
① 分组计算
输入:文本信息列表 + 分组依据字符串
ObjectGrouper 处理流程:
1. 逐项提取分类键(Category):基于输入文本计算分组标识
2. 相同键的条目归为同一组,生成 Group 对象(含 Category + Indices)
3. 每个分组分配一个递增索引(0, 1, 2...)
输出分组结构:
信息输出(D):每个分组一条信息文本,路径 {原路径; 分组索引}
序号输出(i):每组内元素在原列表中的索引,路径 {原路径; 分组索引}
② 动态数据分流
对于每个额外的动态输入数据流(第 3 个端口起):
1. 读取该数据流的列表
2. 利用第一步已计算好的分组索引映射(groupDict)
3. 将数据按照 groupDict[groupName] 中的索引值分配到对应分组分支
4. 每个分组对应输出路径 {原路径; 分组索引}
📋 使用示例
输入信息(S):{ "A", "B", "A", "C", "B", "A" }
分组过程:
Group A: indices = {0, 2, 5}
Group B: indices = {1, 4}
Group C: indices = {3}
输出信息(D):
{0;0} → A
{0;1} → B
{0;2} → C
输出序号(i):
{0;0} → 0, 2, 5(A 组的索引)
{0;1} → 1, 4(B 组的索引)
{0;2} → 3(C 组的索引)
额外数据流(D1):{"X","Y","Z","W","V","U"}
{0;0} → X, Z, U(对应 A 组的索引位置 0,2,5)
{0;1} → Y, V(对应 B 组的索引位置 1,4)
{0;2} → W(对应 C 组的索引位置 3)