如何修改C#中嵌套Dictionary的int类型键值并保留对应列表值
在C#中修改嵌套Dictionary的int键并保留对应List值
没问题,我来帮你搞定这个需求!针对你定义的Dictionary<string, Dictionary<int, List<string>>> res结构,要修改内层Dictionary的int键同时保留对应的List
基础实现步骤
假设你已经明确要修改的外层string键(比如叫targetOuterKey)、要替换的旧int键(oldIntKey)和新int键(newIntKey),可以按以下步骤操作:
- 先获取外层字典中对应的内层Dictionary:
var innerDict = res[targetOuterKey]; - 检查内层字典是否包含旧键,如果存在就取出对应的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
相关产品推荐
相关产品推荐

