VB.net将重复的类项合并到列表中

时间:2014-08-17 13:19:19

标签: vb.net

我有一类变量。为了简单起见,我将以汽车库存为例。所以在我的班上我有变量说: -

Car Manufacturer
Car Colour
Car Quantity

我的班级看起来像这样..(但可能有数百行)

BMW, Black, 2
Mercedes, White, 1
Honda, Green, 3
BMW, Red, 1

我需要创建一个合并制造商和数量的列表,但是将颜色分开,例如新列表应该类似于: -

BMW, 3
Black
Red
Mercedes, 1
White
Honda, 3
Green

有人可以帮忙解释最好的解决方法吗?

1 个答案:

答案 0 :(得分:0)

假设您不讨厌单行并了解LINQ的工作原理,以下表达式将返回Tuple(Of String, Integer)数组,其中Item1将具有制造商名称和Item2将拥有他们的汽车总数:

YourCarsList.GroupBy(Function(r) r.Manufacturer).Select(Function(r) New Tuple(Of String, Integer)(r.Key, r.Sum(Function(r2) r2.Quantity))).ToArray()

请注意,您在问题中显示的输出是 console-ish ,并且无法通过函数或表达式以该形式返回。如果你真的想将它打印为文本输出,你可以像这样扩展上面的表达式:

Dim Res = YourCarsList.GroupBy(Function(r) r.Manufacturer)

For Each R In Res
    output.AppendLine(R.Key, r.Sum(Function(r) r.Quantity))

    For Each Clr In R.Select(Function(r) r.Colour).Distinct().OrderBy(Function(r) r)
        output.AppendLine(Clr)
    Next 
Next