SlideCombine/智能排序说明.md
yuuko 7f48871ab7 实现智能文件排序算法 - 修复跨位数排序问题
问题修复:
- 原先的字符串排序导致:1-3, 10-12, 2-4, 4-6(错误顺序)
- 现在智能排序:1-3, 2-4, 4-6, 10-12(正确顺序)

技术实现:
 BkmkFileComparer类:智能文件比较器
 正则表达式提取:(?:[\w-]+\s+)?(\d+)
 多格式支持:CH-875 1-3, Volume 2, Part 1等
 向后兼容:无数字格式仍按字符串排序

排序规则:
1. 都有数字:按数字大小比较
2. 只有一方有数字:有数字的排前面
3. 都无数字:按完整字符串比较

测试案例:
CH-875 1-3 → CH-875 2-4 → CH-875 4-6 → CH-875 10-12

现在文件合并顺序完全符合自然阅读顺序!

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-24 18:41:20 +08:00

2.6 KiB
Raw Blame History

智能排序算法改进说明

🎯 改进前后对比

改进前(字符串排序)

原始文件列表:
- CH-875 1-3/FreePic2Pdf_bkmk.txt
- CH-875 10-12/FreePic2Pdf_bkmk.txt
- CH-875 2-4/FreePic2Pdf_bkmk.txt
- CH-875 4-6/FreePic2Pdf_bkmk.txt

字符串排序结果(错误):
1. CH-875 1-3.txt      ← 正确
2. CH-875 10-12.txt     ← 错误应该是第4个
3. CH-875 2-4.txt       ← 错误应该是第2个
4. CH-875 4-6.txt       ← 错误应该是第3个

改进后(智能数字排序)

智能排序结果(正确):
1. CH-875 1-3.txt      ← 第1个
2. CH-875 2-4.txt      ← 第2个
3. CH-875 4-6.txt      ← 第3个
4. CH-875 10-12.txt     ← 第4个

🔧 算法实现

核心逻辑

  1. 提取文件夹名称:从完整路径中提取文件夹部分
  2. 正则表达式匹配:使用正则提取数字部分
  3. 智能比较:优先按数字大小,无数字则按字符串

正则表达式

@"(?:[\w-]+\s+)?(\d+)"

支持的格式:

  • CH-875 1-3 → 提取 1
  • CH-875 10-12 → 提取 10
  • Volume 2 → 提取 2
  • Part 1 → 提取 1

比较规则

  1. 都有数字:按数字大小比较
  2. 只有一方有数字:有数字的排前面
  3. 都无数字:按完整字符串比较

📋 测试用例

测试案例1标准格式

输入:
CH-875 1-3, CH-875 4-6, CH-875 7-9, CH-875 10-12

输出:
CH-875 1-3 → CH-875 4-6 → CH-875 7-9 → CH-875 10-12

测试案例2跨位数

输入:
CH-875 2-3, CH-875 10-15, CH-875 1-4, CH-875 11-12

输出:
CH-875 1-4 → CH-875 2-3 → CH-875 10-15 → CH-875 11-12

测试案例3无数字格式

输入:
CH-875-第一章, CH-875-第二章, CH-875-第三章

输出:
CH-875-第一章 → CH-875-第二章 → CH-875-第三章(按字符串排序)

测试案例4混合格式

输入:
CH-875 Part 1, CH-875 2-3, CH-875 Chapter 3, CH-875 1-2

输出:
CH-875 1-2 → CH-875 2-3 → CH-875 Part 1 → CH-875 Chapter 3

优势

  1. 正确排序:解决跨位数排序问题
  2. 格式兼容:支持多种文件命名格式
  3. 向后兼容:无数字格式仍然正常工作
  4. 性能良好:一次提取,多次比较

🔍 代码位置

FileMerger.cs 第65行

var result = ProcessFileGroup(group.Key, group.Value.OrderBy(f => f, new BkmkFileComparer()).ToList(), txtSourcePath);

BkmkFileComparer 类:

  • 位置FileMerger.cs 第14-67行
  • 功能:智能文件比较器
  • 特点:基于数字提取的排序算法

这个改进确保了文件夹按照自然的阅读顺序进行合并!