0

我声明我的二维列表:

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

每个列表都是这样填充的:

二维列表填充

示例代码填写:

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

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

在此处输入图像描述

我怎样才能得到这个结果?

4

1 回答 1

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

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

于 2012-05-02T19:21:43.353 回答