数据分组 · Group Data

以文本信息作为分类依据,将相同内容的数据自动归入同一分组,支持动态扩展多个输入流
📂 LK → Tree 📄 GroupData2.cs 📊 分组聚合 🔗 动态端口 🧩 ObjectGrouper

📖 功能概述

输入一组文本信息(如序号、物料编码、颜色名称等),组件内置 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) Text 必需 用来分组的信息文本列表。相同内容的文本将被归入同一分组。
占位符 (*) Generic 可选 占位端口,用于保留第 2 输入位置。无效输入可忽略。
Data n (Dn) Generic 可选 需要分组的额外数据流(动态添加)。按分组规则同步分配到对应组。(从第 3 端口起动态添加)

📤 输出参数

名称类型说明
信息 (D) Text 按分组输出的文本信息树。每条路径对应一个分组,值为该分组的分类名称。
序号 (i) Integer 分组序号树。每条路径对应一个分组,值为该分组内元素在原始信息列表中的索引位置。
Data n (Dn) Generic 额外数据流分组后的结果(动态输出,与动态输入端口对应)。

📋 使用示例

输入信息(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)

🎯 使用场景

⚠️ 注意事项:
  • 动态输入端口的数量会自动同步输出端口的数量——增加一个输入就增加一个对应输出。
  • 信息输入为空时,输出为空树,不会创建任何分组。
  • 额外数据流的索引必须与信息列表对齐,否则超出范围的索引会被自动忽略。
  • 第 2 端口(占位符)为可选,可用于保持输入结构统一。

📋 组件信息

名称数据分组
英文名Group Data (GD)
分类LK → Tree
基类GH_Component + IGH_VariableParameterComponent
GUID97E1BFBC-969A-4225-AE2E-95E250498A45