2012-08-23 61 views
2

我有一個像處理列表

X,10 
X,30 
Y,10 

我想處理它們到格式化一樣從最初的名單「重要組成部分鍵值對的新列表,和鍵值對的列表inputList包含該密鑰的密鑰的初始列表值「 例如

X,40 
Y,10 

此方法是否有效?我不知道使用的實際方法。另外,我不認爲我可以更改現有鍵值對的值,所以我可能不得不從輸出列表中刪除現有的鍵並添加一個具有總和值的新鍵。

For each inputPair in inputList 
    If outputList.Contains(pair with Key = inputPair.Key) 
     outputList.Item(Key = inputPair.Key).value = (inputPair.value + outputList.Item(Key = inputPair.Key).value) 
    Else 
     outputList.Add(New pair = inputPair.Key, inputPair.Value) 

我打算使用LINQ。

回答

3

使用LINQ將可能是最簡單的方法,如果你可以返回KeyValuePairs的一個新的列表,而不是更新現有的一個:

Dim result = _ 
    (From kvp In inputList 
    Group kvp By kvp.Key Into Group 
    Select New KeyValuePair(Of String, Integer)(_ 
     Key, Group.Sum(Function(kvp) kvp.Value))).ToList() 

假設inputListList(Of KeyValuePair(Of String, Integer))型的,這將返回一個新的對象result鍵與相加結果相同的類型。