列表数据偏移 · Shift List

将列表数据整体偏移指定步长,支持循环/非循环两种模式,同时输出正向和反向偏移结果
📂 LK → Tree 📄 ShiftList.cs 🔄 列表旋转 ↔️ 正向+反向

📖 功能概述

对一个列表数据执行循环位移操作,将所有元素按指定偏移量向左或向右移动。 正偏移值表示右移(元素向列表末尾方向移动),负偏移值表示左移

组件同时输出正向偏移结果(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)

🎯 使用场景

⚠️ 注意事项:
  • 偏移值超过列表长度时会被自动取模归一化(如偏移 7,长度 5 → 等效偏移 2)。
  • 非循环模式下,偏移后列表长度会变短(丢弃移出端的数据)。
  • 输入空列表时,正向和反向偏移结果均为空列表。
  • 偏移值 0 时两个输出均等于输入列表(无论循环模式开启与否)。

📋 组件信息

名称列表数据偏移
英文名Shift List (Shift)
分类LK → Tree
基类GH_Component
GUIDE44189BD-7647-469F-89EC-9ED00F787C06