特定键C#

时间:2016-07-07 18:29:33

标签: c# linq dictionary generic-collections

我有一个包含两个相似键的字典,其中一个拼写错误,因此它创建了另一个键,我希望将其值相加,并删除拼写错误的键/值对。

如果我有一个部门字典,以部门名称为关键字,以及该部门的人员数量作为值,我想总结一下" 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 }
        };

字典已经创建,因此我只使用初始化进行说明。

4 个答案:

答案 0 :(得分:3)

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

departments.Remove("Marketin");

答案 1 :(得分:1)

这是我的草图更多&#34; generic&#34;方法:

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;
    }

然后你可以调整Normalize方法,以便识别其他格式错误的键,如果有更多的话。

答案 2 :(得分: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);
    }
}

答案 3 :(得分:0)

  

我想总结&#34;营销&#34;的价值观。和&#34; Marketin&#34;并删除拼写错误的键/值对&#34; Marketin&#34;。

这是用户识别问题文本和正确文本然后删除不正确的文本并将值添加(加总)到正确的键值的文件。

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