📖 功能概述
对一个列表数据执行循环位移操作,将所有元素按指定偏移量向左或向右移动。
正偏移值表示右移(元素向列表末尾方向移动),负偏移值表示左移。
组件同时输出正向偏移结果(Start List)和反向偏移结果(End List),
分别对应列表向右和向左偏移后的效果。
循环模式:开启后,从一端移出的元素会从另一端重新进入列表,保持元素总数不变。
关闭时,移出的元素被丢弃,列表长度会变短。
🧠 核心算法:取模偏移
偏移量归一化
effectiveOffset = offset % list.Count
• 偏移量取模列表长度,去除完整的循环
• 负偏移转换:if (effectiveOffset < 0) effectiveOffset += list.Count
例:偏移值 7,列表长度 5 → effectiveOffset = 7 % 5 = 2
正向偏移(Start List)
循环模式:newList[i] = list[(i + offset) % count]
每个新位置 i 的元素来自原列表的 (i+offset) 位置(循环取模)
非循环模式:取 list[offset..end] 区间
例:list = [A,B,C,D,E],offset=2 → Start = [C,D,E](丢弃 A,B)
反向偏移(End List)
循环模式:newList[i] = list[(i - offset + count) % count]
每个新位置 i 的元素来自原列表的 (i-offset) 位置
非循环模式:取 list[0..count-offset] 区间
例:list = [A,B,C,D,E],offset=2 → End = [A,B,C](丢弃 D,E)
📥 输入参数
| 名称 | 类型 | 必填 | 说明 |
| 列表 (L) |
Generic |
必需 |
需要偏移的列表数据,支持任意类型。 |
| 偏移值 (O) |
Integer |
必需 |
偏移步长(默认 1)。正数→右移,负数→左移。 |
| 数据循环 (W) |
Boolean |
必需 |
是否启用循环模式(默认 false)。true 时移出的元素绕回到另一端。 |
📤 输出参数
| 名称 | 类型 | 说明 |
| 正向偏移结果 (S) |
Generic |
列表向右偏移指定步长后的结果(Start List)。 |
| 反向偏移结果 (E) |
Generic |
列表向左偏移指定步长后的结果(End List)。 |
📋 使用示例
输入列表:[A, B, C, D, E]
偏移值:2
数据循环:True
正向偏移:← 每个位置取 (i+2) % 5
i=0 → list[(0+2)%5] = C
i=1 → list[(1+2)%5] = D
i=2 → list[(2+2)%5] = E
i=3 → list[(3+2)%5] = A
i=4 → list[(4+2)%5] = B
Start = [C, D, E, A, B]
反向偏移:← 每个位置取 (i-2+5)%5
End = [D, E, A, B, C]
数据循环:False
Start = [C, D, E](丢弃 A, B)
End = [A, B, C](丢弃 D, E)
🎯 使用场景
- 时序数据对齐:将时间序列数据偏移指定步长,计算前后时序的差值
- 列表轮转展示:循环模式可用于排队轮转、换位排序等场景
- 滑动窗口:非循环模式的 Start/End 输出对齐,可配合实现滑动窗口分析
- 数据配对:同时输出正向和反向偏移,方便计算相邻元素的差分
⚠️ 注意事项:
- 偏移值超过列表长度时会被自动取模归一化(如偏移 7,长度 5 → 等效偏移 2)。
- 非循环模式下,偏移后列表长度会变短(丢弃移出端的数据)。
- 输入空列表时,正向和反向偏移结果均为空列表。
- 偏移值 0 时两个输出均等于输入列表(无论循环模式开启与否)。
📋 组件信息
| 名称 | 列表数据偏移 |
| 英文名 | Shift List (Shift) |
| 分类 | LK → Tree |
| 基类 | GH_Component |
| GUID | E44189BD-7647-469F-89EC-9ED00F787C06 |