2012-12-04 85 views
0

我有一個KeyValuePair列表中格式化爲string,int用一個例子內容C#:C# - 從KeyValuePair列表中刪除鍵重複和增加價值

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

可以添加MYLIST的定義代碼? –

+0

你真的想做什麼?如果您使用僞代碼,請嘗試更加明確。我不認爲你的例子解釋你想要做什麼。 –

+0

您是否需要實際保存訂單? –

回答

6
var newList = myList.GroupBy(x => x.Key) 
      .Select(g => new KeyValuePair<string, int>(g.Key, g.Sum(x=>x.Value))) 
      .ToList(); 
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()); 
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(); 
    } 
} 

第一字典應該是你原來的結構。要向其中添加元素,首先檢查是否存在鍵,如果存在,則只需將該元素添加到值列表中,如果該元素不存在並將新項添加到字典中。第二個字典只是第一個字詞的投影,它將每個條目的值列表相加。

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]); 
} 
+0

以什麼方式比僅僅學習使用linq更好。對於這個特定的場景,linq更具表現力。 –