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

如何将指定字符串拆分并存储到二维Dictionary<Language, Dictionary<string, string>>中

如何拆分字符串并填充到二维字典中

没问题,我来帮你梳理清楚整个逻辑,一步步实现字符串拆分和二维字典的填充。首先咱们先明确核心目标:把Content里的每个ID条目拆分成法语和英语翻译,分别存入对应Language枚举的内层字典中。

第一步:初始化二维字典

首先,你需要先给二维字典的每个Language枚举值初始化对应的内层字典,不然直接添加会报错。比如:

// 初始化外层字典,为每种语言创建内层字典
var items = new Dictionary<Language, Dictionary<string, string>>
{
    { Language.French, new Dictionary<string, string>() },
    { Language.English, new Dictionary<string, string>() }
};

第二步:拆分整个Content为独立的ID条目

你的Content格式是ID_XXX==>法语翻译---英语翻译 ID_YYY==>法语翻译---英语翻译,这里的关键是不能直接按空格拆分(因为翻译内容里可能有空格,比如Joueur 1),所以推荐用正则表达式来匹配每个完整的ID条目。正则可以写成ID_\w+==>.+?---.+?(?=\sID_|$),它的作用是匹配从ID_开始,到下一个ID_或者字符串结尾的完整条目。

代码实现:

using System.Text.RegularExpressions;

// 先清理Content里的多余空格(比如开头的空格)
string cleanedContent = Content.Trim();
// 匹配所有ID条目
var entryMatches = Regex.Matches(cleanedContent, @"ID_\w+==>.+?---.+?(?=\sID_|$)");

if (entryMatches.Count == 0)
{
    return ErrorCode.BAD_FILE_FORMAT; // 没有找到任何有效条目
}

第三步:拆分每个条目并填充字典

对于每个匹配到的条目,我们需要分两次拆分:

  1. 用==>拆分,得到ID和翻译部分
  2. 用---拆分翻译部分,得到法语和英语内容

然后把ID和对应翻译添加到对应语言的内层字典中,同时要做错误检查(比如拆分后部分缺失)。

代码片段:

foreach (Match match in entryMatches)
{
    string entry = match.Value;
    // 第一步:拆分ID和翻译内容
    string[] idAndTranslations = entry.Split(new[] { "==>" }, StringSplitOptions.None);
    if (idAndTranslations.Length != 2)
    {
        return ErrorCode.BAD_FILE_FORMAT; // 格式错误,没有==>分隔符
    }
    string id = idAndTranslations[0].Trim();
    string translationsPart = idAndTranslations[1].Trim();

    // 第二步:拆分法语和英语翻译
    string[] langTranslations = translationsPart.Split(new[] { "---" }, StringSplitOptions.None);
    if (langTranslations.Length != 2)
    {
        return ErrorCode.BAD_FILE_FORMAT; // 格式错误,没有---分隔符
    }
    string frenchText = langTranslations[0].Trim();
    string englishText = langTranslations[1].Trim();

    // 检查翻译内容是否为空
    if (string.IsNullOrEmpty(frenchText) || string.IsNullOrEmpty(englishText))
    {
        return ErrorCode.MISSING_FIELD; // 缺失翻译内容
    }

    // 填充到字典中
    items[Language.French].Add(id, frenchText);
    items[Language.English].Add(id, englishText);
}

第四步:整合完整的Parse方法

把上面的步骤整合到你的Parse方法里,注意处理各种错误情况,最后返回ErrorCode.OK表示成功:

using System.Text.RegularExpressions;

public ErrorCode Parse()
{
    string Content = "ID_PLAYER_1==>Joueur 1---Player 1 ID_AMMO==>Muni---Ammo";
    // 初始化二维字典
    var items = new Dictionary<Language, Dictionary<string, string>>
    {
        { Language.French, new Dictionary<string, string>() },
        { Language.English, new Dictionary<string, string>() }
    };

    // 清理内容并匹配条目
    string cleanedContent = Content.Trim();
    var entryMatches = Regex.Matches(cleanedContent, @"ID_\w+==>.+?---.+?(?=\sID_|$)");

    if (entryMatches.Count == 0)
    {
        return ErrorCode.BAD_FILE_FORMAT;
    }

    foreach (Match match in entryMatches)
    {
        string entry = match.Value;
        string[] idAndTranslations = entry.Split(new[] { "==>" }, StringSplitOptions.None);
        if (idAndTranslations.Length != 2)
        {
            return ErrorCode.BAD_FILE_FORMAT;
        }
        string id = idAndTranslations[0].Trim();
        string translationsPart = idAndTranslations[1].Trim();

        string[] langTranslations = translationsPart.Split(new[] { "---" }, StringSplitOptions.None);
        if (langTranslations.Length != 2)
        {
            return ErrorCode.BAD_FILE_FORMAT;
        }
        string frenchText = langTranslations[0].Trim();
        string englishText = langTranslations[1].Trim();

        if (string.IsNullOrEmpty(frenchText) || string.IsNullOrEmpty(englishText))
        {
            return ErrorCode.MISSING_FIELD;
        }

        // 这里如果ID重复的话会抛出异常,你可以根据需求处理,比如用TryAdd
        // items[Language.French].TryAdd(id, frenchText);
        items[Language.French].Add(id, frenchText);
        items[Language.English].Add(id, englishText);
    }

    // 如果需要把items作为类的成员变量保存,这里赋值:this.items = items;

    return ErrorCode.OK;
}

一些额外的注意点

  • 如果你需要处理ID重复的情况,推荐用TryAdd方法代替Add,避免抛出异常:items[Language.French].TryAdd(id, frenchText)
  • 正则表达式可以根据实际的ID格式调整,如果ID里有特殊字符,比如下划线以外的符号,需要修改\w为对应的匹配规则
  • 清理内容的时候,除了Trim(),还可以考虑替换多个连续空格为单个空格,避免条目之间的分隔问题

内容的提问来源于stack exchange,提问作者Scary Monsters

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:13:02