2015-07-20 90 views
0

我有我需要大肆削減對象的列表的列表。這些物品是可變的,所以我不能強迫它。Vb.net大肆削減對象

這裏是我想做...

原始對象的列表...削減下來後物體的

 
"Name":"Apple","Qty":1 
"Name":"Banana","Qty":2 
"Name":"Apple","Qty":3 
"Name":"Banana","Qty":4 
"Name":"Strawberry","Qty":5 

列表...

 
"Name":"Apple","Qty":4 
"Name":"Banana","Qty":6 
"Name":"Strawberry","Qty":5 

我在.net 4.5環境中工作,所以我可以接受任何方法。

+0

你想看看LINQ的'GroupBy'方法。如果您在使用時遇到問題,請發佈一個新問題。 –

+1

它是「_ ** pare ** _ down」,而不是「pair down」。 –

回答

0

所以,你必須有一個名稱和數量屬性的對象的列表?您可以使用按組合並:

var items = list _ 
    .GroupBy(Function(i) i.Name) _ 
    .Select(Function(i) new Item With { .Name = i.Key, .Qty = i.Sum(Function(q) q.Qty) }) 

按名稱分組,然後您可以使用總和來總計項目總數。你也可以從another example看到這個。

+1

這是一個VB .NET問題;你的回答是錯誤的語言。另外,查詢語法在VB .NET中是慣用的。 –

+0

更正爲VB。 –

+0

編輯,以放回時期和_需要新的生產線,因爲我使用LINQ方法的方法... –

0

你可以看看如何創建存儲的名稱作爲鍵,然後數作爲值的字典:

Private _dict As Dictionary(Of String, Integer) 
Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click 

    _dict = New Dictionary(Of String, Integer) 

    AddToDictionary("Apple", 1) 
    AddToDictionary("Banana", 2) 
    AddToDictionary("Apple", 3) 
    AddToDictionary("Banana", 4) 
    AddToDictionary("Strawberry", 5) 


    'The following outputs: 
    'Apple : 4 
    'Banana : 6 
    'Strawberry : 5 

    For Each kvp In _dict 
     Debug.WriteLine(kvp.Key & " : " & kvp.Value) 
    Next 
End Sub 

Private Sub AddToDictionary(name As String, value As Integer) 
    If _dict.ContainsKey(name) Then 
     _dict(name) += value 
    Else 
     _dict.Add(name, value) 
    End If 
End Sub