数据降级 · Safety Shift

对树形数据执行路径降级(简化)操作,通过正/负偏移值灵活控制保留的层级数
📂 LK → Tree 📄 ShiftPaths2.cs 🏗️ 路径简化 🖱️ 右键菜单

📖 功能概述

对树形数据的路径结构执行降级(Shift)操作——从路径中移除指定数量的层级索引, 使树形数据的结构变得更浅、更简单。输入数据默认经过 Simplify 预处理(折叠重叠路径)。

降级值(偏移)支持正负整数:

安全保护机制:当偏移量导致路径深度降为 0 或负数时(即降级过头),组件提供了右键菜单选择兜底策略。

🧠 核心算法:路径区间裁剪

路径分解规则

设偏移值 O,路径索引数组 P[0..N-1](N = 深度):

O > 0 (保留前 O 级):
  新路径 = P[0], P[1], ... , P[O-1] ← 保留前 O 个索引
  例:{3;1;4;2},O=2 → {3;1}

O < 0 (保留后 |O| 级):
  新路径 = P[N+|O|], ..., P[N-1] ← 保留后 |O| 个索引
  例:{3;1;4;2},O=-2 → {4;2}

O = 0:保持原路径不变

降级过深时的兜底策略

当路径深度 N ≤ |O| 时(降级后深度为 0 或负数):

「保留最后一级」(默认):
  新路径 = {P[0]} — 以原路径的第一个索引作为一级路径

「不保留最后一级」
  新路径 = {0} — 所有降级过深的数据统一归入 {0} 路径

📥 输入参数

名称类型必填说明
数据 (D) Generic 必需 需要降级的数据树。输入自动经过 Simplify 预处理。
降级值 (O) Integer 必需 降级步长(默认 -1)。正数保留前 N 级,负数保留后 |N| 级。

📤 输出参数

名称类型说明
结果 (D) Generic 降级后的数据树。路径结构按偏移值裁剪,分支内元素不变。

📋 使用示例

输入树(Simplify 后):
{0;0;0} → [A,B]
{0;0;1} → [C]
{0;1;0} → [D,E,F]

降级值 O = 1:
  {0;0;0} → 保留前 1 级 → {0} ← [A,B]
  {0;0;1} → 保留前 1 级 → {0} ← [C]
  {0;1;0} → 保留前 1 级 → {0} ← [D,E,F]
  合并后:{0} → [A,B,C,D,E,F](三级折叠为单级)

降级值 O = -1:
  {0;0;0} → 保留后 1 级 → {0} ← [A,B]
  {0;0;1} → 保留后 1 级 → {1} ← [C]
  {0;1;0} → 保留后 1 级 → {0} ← [D,E,F]
  合并后:{0} → [A,B,D,E,F], {1} → [C]

🎯 应用场景

⚠️ 注意事项:
  • 输入数据会先通过 Simplify 自动简化(折叠重叠路径),这是组件内部行为,无需额外前置处理。
  • 降级后如果多个不同原路径的数据被分配到同一条新路径,它们会被合并追加到该分支。
  • 降级值超过路径深度时触发兜底策略(右键菜单选择)。
  • 降级值 0 不改变路径结构(但 Simplify 预处理仍然生效)。

📋 组件信息

名称数据降级
英文名Safety Shift (Shift)
分类LK → Tree
基类RighrClickComponent
GUID241184E2-F88B-4EBD-B0E3-4A292FD5E57F