从字典<string,dictionary <string,=“”string =“”>&gt;中删除最后一个字符使用C#

时间:2017-07-06 06:57:34

标签: c# linq

我有

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()));

这是一个错误。 任何人都可以帮我提供我需要的输出。

2 个答案:

答案 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);