我宣布我的2D列表:
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)。
我怎么能得到这个结果?
答案 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字符串列表。这样做会更安全,更容易阅读。