2016-07-07 566 views
2

我有一个带有两个相似键的字典,其中一个拼写错误,所以它创建了另一个键,我想总结这些键的值,并删除拼写错误的键/值对。特定键字典的总和值C#

如果我有一个部门字典,以部门名称为关键字,并将该部门的人员数量作为值,我想总结“Marketing”和“Marketin”的值并删除拼写错误的键/值对“Marketin”。

 var departments = new Dictionary<string, int>() 
     { 
      { "HR", 33 }, 
      { "Management", 8 }, 
      { "Marketing", 21 }, 
      { "Marketin", 4 }, 
      { "Sales", 44 } 
     }; 

我想字典中是这样的:已经创建

 var departments = new Dictionary<string, int>() 
     { 
      { "HR", 33 }, 
      { "Management", 8 }, 
      { "Marketing", 25 }, 
      { "Sales", 44 } 
     }; 

本字典,所以我只用于说明目的的初始化。

+2

错字从哪里来?这些数据是否需要最终写回数据库?在源头修正错字不明智吗? –

+0

现在,我最终将只是在仪表板上显示一些数据。所以,我最终会修复它的来源,这是一个数据库。 – miken

+0

明确编码黑客,修复错误,只会导致一个带广告网络,你应该修复你的数据而不是你的代码 –

回答

3
departments["Marketing"] += departments["Marketin"]; 

departments.Remove("Marketin"); 
+0

这个伎俩。感谢菲尔。 – miken

0

这里是一个代码示例,说明您可以用来执行所需操作的字典功能。

至于你需要使用哪些功能来完成你的确切目的,我会把它作为一个练习。如果你需要更多的帮助。留下评论,解释你不明白的东西。

//how to get a value in your dictionary 
string myValue = departments["Marketin"]; 

//how to update a value in your dictionary 
departments["Marketing"] = 5; 

//how to remove a value in your dictionary 
departments.Remove("Marketin"); 

//how to iterate over your dictionary 
foreach(var department in departments) 
{ 
    //only print the value if it's "Marketin" 
    if(department.Key == "Marketin") 
    { 
     Console.WriteLine(department.Value); 
    } 
} 
0

我想总结的值“营销”和“Marketin”,并删除拼写错误的键/值对“Marketin”。

下面是用户已经确定问题文本和正确的文本,然后删除不正确的(s)并将值添加(合计)到适当的键值。

var departments = new Dictionary<string, int>() 
{ 
    { "HR", 33 }, 
    { "Management", 8 }, 
    { "Marketing", 21 }, 
    { "Marketin", 4 }, 
    { "Sales", 44 } 
}; 

var baseText = "Market"; 
var validText = "Marketing"; 

var removal = departments.ToList() 
         .Where(itm => itm.Key.StartsWith(baseText) && 
             itm.Key.Equals(validText) == false) 
         .ToList(); 

removal.ForEach(itm => departments.Remove(itm.Key)); 

departments[validText] += removal.Sum(itm => itm.Value); 

有了最终结果:

enter image description here

+0

这不是最好的想法对于像MarketPlace这样具有相同前缀的其他部门来说,我们没有所有的数据在这里最好是明确的 –

+0

@ johnny5这个代码可以被转化为一个使用方法在其他部门的钥匙上。我只是编码到当前的规范。 – OmegaMan

+0

不成熟的优化是万恶之源。 –

1

这里是我的更 “通用” 的方法素描:

var normalisedDepartments = 
    departments.GroupBy(x => Normalise(x.Key), y => y.Value) 
      .ToDictionary(x => x.Key, y => y.Sum()); 

    private static string Normalise(string key) 
    { 
     if (key == "Marketin") 
     { 
      return "Marketing"; 
     } 
     return key; 
    } 

然后你可以调整标准化的方法,以便它可以识别其他畸形键,应该有更多的。