2015-07-20 121 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