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

如何修改C#中嵌套Dictionary的int类型键值并保留对应列表值

在C#中修改嵌套Dictionary的int键并保留对应List值

没问题,我来帮你搞定这个需求!针对你定义的Dictionary<string, Dictionary<int, List<string>>> res结构,要修改内层Dictionary的int键同时保留对应的List值,核心思路就是把旧键关联的List转移到新键,然后移除旧键。下面给你详细的实现方法和代码示例:

基础实现步骤

假设你已经明确要修改的外层string键(比如叫targetOuterKey)、要替换的旧int键(oldIntKey)和新int键(newIntKey),可以按以下步骤操作:

  1. 先获取外层字典中对应的内层Dictionary:
    var innerDict = res[targetOuterKey];
    
  2. 检查内层字典是否包含旧键,如果存在就取出对应的List并完成键的替换:
    if (innerDict.ContainsKey(oldIntKey))
    {
        var listToKeep = innerDict[oldIntKey];
        // 移除旧键
        innerDict.Remove(oldIntKey);
        // 添加新键并绑定原List
        innerDict[newIntKey] = listToKeep;
    }
    

更健壮的实现(避免异常)

上面的基础写法如果外层键不存在或者内层键不存在会抛出异常,实际开发中推荐用TryGetValue来做安全检查,避免程序崩溃:

// 定义你要操作的具体键值
string targetOuterKey = "你的外层目标键";
int oldIntKey = 1;
int newIntKey = 2;

// 先尝试安全获取内层字典
if (res.TryGetValue(targetOuterKey, out var innerDict))
{
    // 检查旧键是否存在并取出对应的List
    if (innerDict.TryGetValue(oldIntKey, out var listToKeep))
    {
        innerDict.Remove(oldIntKey);
        
        // 这里可以加额外判断:如果新键已经存在,要不要覆盖?
        // 比如不想覆盖的话就先判断:
        // if (!innerDict.ContainsKey(newIntKey))
        // {
        //     innerDict[newIntKey] = listToKeep;
        // }
        // 直接赋值会覆盖新键原有的值
        innerDict[newIntKey] = listToKeep;
        
        Console.WriteLine("键修改完成!");
    }
    else
    {
        Console.WriteLine("内层字典中不存在要修改的旧键");
    }
}
else
{
    Console.WriteLine("外层字典中不存在目标键");
}

额外注意点

  • 如果新键已经存在,直接赋值会覆盖原新键对应的List值,记得根据你的业务需求决定是否要加覆盖判断。
  • 要是需要批量修改多个内层int键,可以把上面的逻辑封装成一个方法,传入外层键、旧键新键的映射字典,循环处理即可。

内容的提问来源于stack exchange,提问作者Petkov Alexander

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:34:07