数据排序 · Sort Data

以文本信息为排序依据,将关联数据按照文本的排序顺序重新排列,支持动态扩展
📂 LK → Tree 📄 SortData.cs 📊 排序整理 🔗 动态端口 🧩 TextSorter

📖 功能概述

输入一组文本信息作为排序依据,内置的 TextSorter 引擎将文本按字母/数字/混合等多种语义规则排序, 并输出排序后的文本列表以及每个条目在原列表中的索引映射。

额外的数据流可以通过动态端口输入——端口会自动根据排序结果重新排列数据, 使所有数据列与排序后的文本信息保持同步对齐。

核心思想:相当于 Excel 中的"按某一列排序,关联列同步重排"—— 文本信息是"排序列",其余数据列是"关联列"。

🧠 核心算法:TextSorter 智能排序

排序处理流程

Step 1 — 文本排序:
  调用 TextSorter.SortWithFullInfo(infos, true, false, true) 对文本列表排序
    参数说明:区分大小写=False,倒序=False,自然排序=True
  返回:(resultinfos, listIndices)
    • resultinfos:排序后的文本列表
    • listIndices:排序后每一项在原列表中的索引(重映射表)

Step 2 — 数据重排:
  对每个额外的数据流(从第 3 端口起):
    读取原始数据列表
    按 listIndices 逐个取元素 list[listIndices[i]]
    输出重排后的数据列表

文本排序规则(默认:自然排序)

自然排序(Natural Sort):识别文本中的数字部分并按数值排序
  例:{"A2", "A10", "A1"} → {"A1", "A2", "A10"}
  (字符串排序会得到 {"A1", "A10", "A2"},自然排序正确处理了数字)

大小写:不区分大小写(true → 忽略大小写差异)
方向:正序(false → 不反向)

📥 输入参数

名称类型必填说明
信息 (S) Text 必需 用来排序的参考文本列表。排序结果将作为其他数据流的同步基准。
占位符 (*) Generic 可选 占位端口,用于保持第 2 输入位置。无效输入可忽略。
Data n (Dn) Generic 可选 需要同步排序的额外数据流(动态添加,从第 3 端口起)。

📤 输出参数

名称类型说明
信息 (S) Text 排序后的文本信息列表。
序号 (i) Integer 排序后的每一项在原信息列表中的索引位置(重映射表)。
Data n (Dn) Generic 额外数据流按排序结果重排后的列表(动态输出,与动态输入端口对应)。

📋 使用示例

输入信息(S):{"B2", "A10", "A1", "B1"}
排序处理(自然排序):
  原索引 {0:B2, 1:A10, 2:A1, 3:B1}
  排序后:{A1, A10, B1, B2}
  索引映射 listIndices = [2, 1, 3, 0]

输出信息(S):{"A1", "A10", "B1", "B2"}
输出序号(i):{2, 1, 3, 0}

额外数据流 D1(如长度):{300, 100, 200, 400}
  重排后:listIndices 映射 → list[2]=200, list[1]=100, list[3]=400, list[0]=300
  输出 D1:{200, 100, 400, 300}

🎯 使用场景

⚠️ 注意事项:
  • 排序依据必须是文本类型(字符串),否则无法参与排序。
  • 动态输入端口会自动生成对应的动态输出端口,数量与输入对齐。
  • 如果信息列表为空,组件跳过处理,不会输出任何结果。
  • 额外的数据流长度必须与信息列表一致,否则索引越界会导致运行时错误。
  • 第 2 端口(占位符)为可选,用于保持输入结构统一。

📋 组件信息

名称数据排序
英文名Sort Data (SD)
分类LK → Tree
基类GH_Component + IGH_VariableParameterComponent
GUID6489B804-9067-437C-AD2A-50FFC047610F