保留每条路径除末级以外的前缀,用分支内的项序号替换原末级,从而把相同前缀下“处在同一位置”的数据重新汇入同一分支。
功能概览
它不是把整棵树简单转置,也不会交换路径的全部层级。组件逐个读取原分支:先去掉路径最后一级,再把该分支内第 0、1、2… 项分别放入“保留前缀 + 0、1、2…”的新路径。相同前缀下的多个原分支会在相同项序号处汇合;不同前缀始终彼此独立。
数据对象本身、每个对象的内容以及读入顺序都不会被修改,变化只发生在数据树的分组路径上。

适用场景
- 把同一组下多个分支的第 0 项、第 1 项、第 2 项分别汇总。
- 将“对象分支内的属性列表”改成“按属性位置分支”的结构。
- 在保留项目、楼层或构件组前缀的同时,只翻转路径的最后一个分类维度。
- 为需要按项序号比较或配对的下游组件准备数据。
工作流程
- 检查输入树的所有路径是否具有相同层级;只要有一条层级不同,本次处理就停止。
- 对每条路径移除最后一级,得到需要保留的路径前缀。
- 读取该分支中每个对象的位置,从 0 开始编号。
- 为每个对象建立“原路径前缀 + 项序号”的新路径。
- 把落在相同新路径的数据按原分支遍历顺序追加到一起,输出重组后的数据树。
输入与输出
| 端口 | 要求与结构 | 结果与空值行为 |
|---|---|---|
| 数据树(D) | 必需,通用数据树。所有路径的层级数量必须一致;分支长度可以不同。 | 未提供数据时提示警告;空树输出空树。不同类型的数据可以共存,因为组件不改动对象本身。 |
| 翻转结果(D) | 数据树。路径前缀来自原路径,最后一级改为原分支内的项序号。 | 相同前缀、相同项序号的数据会合并到同一分支;较长原分支多出的项会形成额外的新路径。 |
实际示例
输入 {0;0} = [A0, A1, A2],{0;1} = [B0, B1],{1;0} = [C0, C1]。输出为 {0;0} = [A0, B0]、{0;1} = [A1, B1]、{0;2} = [A2]、{1;0} = [C0]、{1;1} = [C1]。可以看到,{0} 与 {1} 两个前缀没有混合,原分支末级 0、1 不再参与输出路径;真正决定新末级的是对象在各自分支中的位置。
常见问题与限制
- 所有输入路径必须具有相同层级。例如 {0;0} 与 {1;0;0} 混用会报错且没有输出。
- 分支长度不必相同;较短分支只是不会为缺少的项序号贡献数据。
- 若原路径只有一级,保留前缀为空,新路径就直接成为 {0}、{1}、{2}…。
- 组件不按数值大小、名称或数据类型排序,只使用对象在原分支中的现有位置。
- 没有额外菜单或模式;需要翻转其他路径层级时,应先重构路径,使目标层级成为末级。