コレクションの重複データを除外する

  Collection Manipulation

こんなコレクションがあったとします。

例えば、フィールド1~3で値が重複している行は削除したいとします。
現状、BluePrismの標準VBOには、複数列の重複を見て行削除するオブジェクトはなかったため、自作しました。

想定する結果は以下の通りです。
3、4行目が値が重複しているので、3行目を残して4行目を削除しています。
上記の通り、残す行はコレクションデータの上から数えて最初の行とします。

入力

最大3フィールドを見て重複判定できるようにしています。

出力

ソースコード

Try
    If Target_Field1 = "" Then
        Success = False
        Message = "Target_Field1は必須項目です。"
        Exit Sub
    End If

    Dim New_Collection As DataTable
    New_Collection = Collection_In.Clone

    Dim count As Long = 0
    For Each r As DataRow In Collection_In.Rows
        If count = 0 Then
            New_Collection.ImportRow(r)
        Else
            Dim find_rows As DataRow()
            find_rows = New_Collection.Select(Target_Field1 & " = '" & r(Target_Field1) & "'" & _
                    If(Target_Field2 <> "", " AND " & Target_Field2 & " = '" & r(Target_Field2) & "'", "") & _
                    If(Target_Field3 <> "", " AND " & Target_Field3 & " = '" & r(Target_Field3) & "'", ""))

            If find_rows.Length = 0 Then
                New_Collection.ImportRow(r)
            End If
        End If
        count = count + 1
    Next

    Deduplication_Collection = New_Collection.DefaultView.ToTable
    Success = True
    Message = ""
Catch e As Exception
    Success = False
    Message = e.Message
End Try

サンプル

https://github.com/falcslab/blueprism/tree/collection
BPA オブジェクト – コレクション重複削除.xml

LEAVE A COMMENT

CAPTCHA