You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#按数字顺序排序Dictionary键值,按序解析SQL脚本文件夹

解决方案:按数字顺序迭代SQL脚本文件夹

这问题我太有共鸣了!我们团队维护SQL脚本版本库时也遇到过一模一样的需求——必须严格按数字文件夹的顺序执行脚本,避免出现依赖错误。针对你用Dictionary存储后需要按数字顺序迭代的场景,给你两个靠谱的方案:

方案1:从根源解决——用SortedDictionary替代普通Dictionary

普通的Dictionary<TKey, TValue>是无序的,而SortedDictionary<int, TValue>会自动按键的数值大小排序,完美匹配你的需求。

举个代码示例(假设你用C#):

// 初始化按整数键排序的字典
var scriptFolderDict = new SortedDictionary<int, List<string>>();

// 遍历0-12的文件夹(这里模拟获取文件夹列表)
foreach (var folder in Directory.GetDirectories(@"你的脚本根目录"))
{
    var folderName = Path.GetFileName(folder);
    // 把文件夹名转成整数当键,确保顺序
    if (int.TryParse(folderName, out int folderKey))
    {
        // 读取文件夹里的SQL脚本文件
        var sqlScripts = Directory.GetFiles(folder, "*.sql").ToList();
        scriptFolderDict.Add(folderKey, sqlScripts);
    }
}

// 迭代时自动按0→12的顺序处理
foreach (var kvp in scriptFolderDict)
{
    Console.WriteLine($"正在处理文件夹 {kvp.Key} 的脚本:");
    foreach (var scriptPath in kvp.Value)
    {
        var sqlContent = File.ReadAllText(scriptPath);
        // 这里执行你的SQL语句构建逻辑
        Console.WriteLine($"  加载脚本:{Path.GetFileName(scriptPath)}");
    }
}

方案2:如果已经用了普通Dictionary,就先排序键再迭代

要是你已经基于普通Dictionary<string, ...>写了部分代码不想重构,那可以在迭代前把键转成整数排序,再按排序后的顺序遍历:

// 假设你已经有了普通字典,键是文件夹名字符串
var scriptFolderDict = new Dictionary<string, List<string>>();
// ... 这里是填充字典的代码 ...

// 先把键转成整数并排序
var sortedFolderKeys = scriptFolderDict.Keys
    .Select(key => int.Parse(key))
    .OrderBy(key => key);

// 按排序后的键顺序处理
foreach (var key in sortedFolderKeys)
{
    var folderName = key.ToString();
    var sqlScripts = scriptFolderDict[folderName];
    // 执行脚本处理逻辑
    Console.WriteLine($"处理文件夹 {folderName}...");
}

额外小贴士

  • 一定要加int.TryParse的判断,防止文件夹名不是纯数字的情况(比如误命名的文件夹),避免程序崩溃。
  • 如果你的脚本执行有依赖关系,除了按文件夹顺序,最好在脚本里加版本标记,执行时做校验,确保不会跳步执行。

内容的提问来源于stack exchange,提问作者as.beaulieu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 07:21:19