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

在C#中将指定格式文本文件解析为嵌套Dictionary的实现

实现文本文件解析为嵌套Dictionary的完整C#方案

我来帮你完成这个文本解析的实现,下面是包含错误处理、逻辑优化的完整代码方案,完全匹配你需要的Dictionary<int, Dictionary<string, double>>结构:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;

public class NormalizationParser
{
    // 按照需求实现的嵌套字典解析方法
    private Dictionary<int, Dictionary<string, double>> OpenNormalization()
    {
        var nestedDict = new Dictionary<int, Dictionary<string, double>>();
        
        // 流式读取文件(低内存占用,适合大文件),同时过滤空行
        var validLines = File.ReadLines("normalization.txt")
                             .Where(line => !string.IsNullOrWhiteSpace(line));

        foreach (string line in validLines)
        {
            // 分割每行的三个字段:外层int键、内层string键、double值
            var lineParts = line.Split(',');
            
            // 校验行格式是否正确
            if (lineParts.Length != 3)
            {
                Console.WriteLine($"跳过格式错误的行: {line}");
                continue;
            }

            // 安全转换类型(避免格式错误导致程序崩溃)
            if (!int.TryParse(lineParts[0], out int outerKey) ||
                !double.TryParse(lineParts[2], out double value))
            {
                Console.WriteLine($"跳过类型转换失败的行: {line}");
                continue;
            }

            string innerKey = lineParts[1].Trim(); // 去除键值前后的冗余空格

            // 处理外层字典:不存在则创建新的内层字典
            if (!nestedDict.ContainsKey(outerKey))
            {
                nestedDict[outerKey] = new Dictionary<string, double>();
            }

            // 处理内层字典:如果键已存在,这里选择覆盖原有值(可根据需求改为跳过)
            if (nestedDict[outerKey].ContainsKey(innerKey))
            {
                Console.WriteLine($"警告:外层键[{outerKey}]下的内层键[{innerKey}]已存在,将覆盖原有值");
            }
            nestedDict[outerKey][innerKey] = value;
        }

        return nestedDict;
    }
}

关键逻辑说明

  • 高效文件读取:使用File.ReadLines替代ReadAllLines,流式读取内存占用更低,适合处理大文件;同时过滤空行避免无效处理。
  • 健壮的错误处理:
    • 校验每行分割后的字段数量,防止数组越界
    • 使用TryParse替代直接Parse,避免因格式错误导致程序崩溃,同时给出清晰的错误提示
  • 字典结构维护:
    • 先判断外层键是否存在,不存在则创建对应的内层字典
    • 处理内层重复键的场景,默认选择覆盖值,你也可以根据需求修改为跳过重复项
  • 键值清理:对内层string键做Trim处理,避免文本中的空格导致键不匹配

示例解析结果

针对你给出的示例文本:

0,ke-2,0.0986089045676918
0,putar,0.141656526869241
1,film,0.110677581313152
1,aveng,0.12035192077391

解析后的嵌套字典结构为:

{
  0: { "ke-2": 0.0986089045676918, "putar": 0.141656526869241 },
  1: { "film": 0.110677581313152, "aveng": 0.12035192077391 }
}

内容的提问来源于stack exchange,提问作者Fransiskus Cahyadi Putra

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:12:40