0

2Dリストを宣言します。

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

各リストは次のように入力されます。

2Dリストがいっぱい

記入するコード例:

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

さて、今私は(_changesitems)と呼ばれる3番目のリストが必要です。この結果には違いがあることに注意してください:これが見つかった場合は数量を差し引いた結果です(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

他の人が勧めたように、リストの代わりに辞書を使用しました。データにコードと値のみが含まれている限り、辞書の方が適しています。さらに列がある場合は、各列のプロパティを含むクラスを作成してから、文字列の単純な2Dリストではなく、そのクラスタイプのリストを作成することをお勧めします。そうすることで、タイプセーフで読みやすくなります。

于 2012-05-02T19:21:43.353 に答える