我将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
答案 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]);
}