比较两个列表2D并确定差异VB.NET

时间:2012-05-02 17:37:30

标签: vb.net arrays visual-studio

我宣布我的2D列表:

Dim _invoiceitems As New List(Of List(Of String))
Dim _dbitems As New List(Of List(Of String))

每个列表都填充如下:

2D Lists Filled

示例代码填写:

_invoiceitems.Add(New List(Of String))
_invoiceitems(0).Add("Code #")
_invoiceitems(0).Add("Quantity")

好吧,现在我需要第三个名单(_changesitems)注意这个结果与差异: 如果找到,则为减去数量的结果(dbitems - invoiceitems)。

enter image description here

我怎么能得到这个结果?

1 个答案:

答案 0 :(得分:1)

以下代码将生成您要查找的结果:

Private Function getChangesItems(ByVal invoiceItems As Dictionary(Of String, Integer), ByVal dbItems As Dictionary(Of String, Integer)) As Dictionary(Of String, Integer)
    Dim changesItems As Dictionary(Of String, Integer) = New Dictionary(Of String, Integer)()
    Dim allCodes As List(Of String) = New List(Of String)()
    allCodes.AddRange(invoiceItems.Keys)
    allCodes.AddRange(dbItems.Keys)
    For Each code As String In allCodes
        If Not changesItems.ContainsKey(code) Then
            Dim dbQuantity As Integer = 0
            Dim invoiceQuantity As Integer = 0
            If dbItems.ContainsKey(code) Then
                dbQuantity = dbItems(code)
            End If
            If invoiceItems.ContainsKey(code) Then
                invoiceQuantity = invoiceItems(code)
            End If
            Dim changeQuantity As Integer = dbQuantity - invoiceQuantity
            If changeQuantity <> 0 Then
                changesItems.Add(code, changeQuantity)
            End If
        End If
    Next
    Return changesItems
End Function

我使用了字典而不是其他人推荐的列表。只要您的数据只包含代码和值,字典就更合适了。如果您有更多列,我建议创建一个包含每列属性的类,然后创建该类类型的列表,而不是简单的2D字符串列表。这样做会更安全,更容易阅读。