C# - 从KeyValuePair列表中删除Key重复项并添加Value

时间:2012-12-04 07:37:30

标签: c# list duplicate-removal keyvaluepair

我将C#中的KeyValuePair列表格式化为string,int并带有示例内容:

mylist[0]=="str1",5
mylist[2]=="str1",8

我想要一些代码删除其中一个项目,另一个添加重复值 所以它会是:

mylist[0]=="str1",13

定义代码:

List<KeyValuePair<string, int>> mylist = new List<KeyValuePair<string, int>>();
托马斯,我会尝试用伪代码解释它。 基本上,我想要

mylist[x]==samestring,someint
mylist[n]==samestring,otherint

成为:

mylist[m]==samestring,someint+otherint

4 个答案:

答案 0 :(得分:6)

var newList = myList.GroupBy(x => x.Key)
            .Select(g => new KeyValuePair<string, int>(g.Key, g.Sum(x=>x.Value)))
            .ToList();

答案 1 :(得分:2)

var mylist = new KeyValuePair<string,int>[2];

mylist[0]=new KeyValuePair<string,int>("str1",5);
mylist[1]=new KeyValuePair<string,int>("str1",8);
var output = mylist.GroupBy(x=>x.Key).ToDictionary(x=>x.Key, x=>x.Select(y=>y.Value).Sum());

答案 2 :(得分:0)

我会使用不同的结构:

class Program
{
    static void Main(string[] args)
    {
        Dictionary<string, List<int>> dict = new Dictionary<string, List<int>>();
        dict.Add("test", new List<int>() { 8, 5 });
        var dict2 = dict.ToDictionary(y => y.Key, y => y.Value.Sum());
        foreach (var i in dict2)
        {
            Console.WriteLine("Key: {0}, Value: {1}", i.Key, i.Value);
        }
        Console.ReadLine();
    }
}

第一本字典应该是你的原始结构。要向其添加元素,首先检查密钥是否存在,如果存在,只需将元素添加到值列表(如果它不存在)并将新项添加到字典中。第二个字典只是第一个字典的投影,它将每个条目的值列表相加。

答案 3 :(得分:0)

非Linq回答:

Dictionary<string, int> temp = new Dictionary<string, int>();
foreach (KeyValuePair<string, int> item in mylist)
{
    if (temp.ContainsKey(item.Key))
    {
        temp[item.Key] = temp[item.Key] + item.Value;
    }
    else
    {
        temp.Add(item.Key, item.Value);
    }
}
List<KeyValuePair<string, int>> result = new List<KeyValuePair<string, int>>(temp.Count);
foreach (string key in temp.Keys)
{
    result.Add(new KeyValuePair<string,int>(key,temp[key]);
}