我有
Dictionary<string, Dictionary<string, string>>
我的内部字典有以下数据
{
"1": {
"message-Code1": " 0",
"msg-Number-Pos11": "0",
"msg-Number-Pos21": "0",
"msg-Number-Pos31": " "
},
"2": {
"message-Code2": " 0",
"msg-Number-Pos12": "0",
"msg-Number-Pos22": "0",
"msg-Number-Pos32": " "
}
但我想要一个像下面那样的
{
"1": {
"message-Code": " 0",
"msg-Number-Pos1": "0",
"msg-Number-Pos2": "0",
"msg-Number-Pos3": " "
},
"2": {
"message-Code": " 0",
"msg-Number-Pos1": "0",
"msg-Number-Pos2": "0",
"msg-Number-Pos3": " "
}
删除了所有Key
的最后一个字符,即第一组中的1
和第二组中的2
。
我正在尝试下面的代码
var result = dictionary.Where(pair => pair.Value.Remove(pair.Value.Key.Last()));
这是一个错误。 任何人都可以帮我提供我需要的输出。
答案 0 :(得分:6)
基本上你应该创建新的“内部”词典。这很容易做到:
var replacedOuter = outerDictionary.ToDictionary(
outerKey => outerKey, // Outer key stays the same
outerValue => outerValue.ToDictionary(
innerKey => innerKey.Substring(0, innerKey.Length - 1),
innerValue => innerValue));
请注意,如果这会创建任何重复的密钥(即,如果有任何密钥仅与最终字符不同),内部ToDictionary
调用将抛出异常。
答案 1 :(得分:1)
由于您无法更改字典密钥,因此必须使用新密钥重新创建嵌套字典。
foreach (var item in dic.ToArray())
dic[item.Key] = item.Value.ToDictionary(x =>
x.Key.Remove(x.Key.Length - 1), x => x.Value);