コレクションの行列変換です。
既存のCollection ManipulationにTranspose Collectionがあるのですが、思ったのと違う結果が返ってきたので自作しました。
入力
出力
違うそうじゃない。
求めている結果
行と列を変換しています。
ソースコード
Try
Dim New_Collection As DataTable
New_Collection = New DataTable()
'最大行列取得
Dim maxRow, maxCol As Integer
maxRow = Collection_In.Rows.Count
maxCol = Collection_In.Columns.Count
'フィールド作成,空行追加
Dim tmpColCount As Integer = 0
For Each r1 As DataRow In Collection_In.Rows
New_Collection.Columns.Add("Column" & tmpColCount, Type.GetType("System.String"))
tmpColCount = tmpColCount + 1
Next
For Each c1 As DataColumn In Collection_In.Columns
Dim dr As DataRow
dr = New_Collection.NewRow
New_Collection.Rows.Add(dr)
Next
'データ登録
Dim rowCount As Integer = 0
Dim newColCount As Integer = 0
While rowCount < maxRow
Dim colCount As Integer = 0
Dim newRowCount As Integer = 0
For Each c3 As DataColumn In Collection_In.Columns
New_Collection.Rows(newRowCount)("Column" & newColCount) = Collection_In.Rows(rowCount)(c3.ColumnName)
newRowCount = newRowCount + 1
Next
newColCount = newColCount + 1
rowCount = rowCount + 1
End While
Transpose_Collection = New_Collection.DefaultView.ToTable
Success = True
Message = ""
Catch e As Exception
Success = False
Message = e.Message
End Try
注意点
行列変換後のコレクションは、全列の型が「テキスト」になります。
パスワード型やフラグ型のパラメータはテキスト表記されるので、注意してください。
(例1)パスワード型の場合 ⇒ 変換前:●●●●●●●● 変換後:Password
(例2)フラグ型の場合 ⇒ 変換前:True 変換後:True(文字列)
サンプル
https://github.com/falcslab/blueprism/tree/collection
BPA オブジェクト – コレクション行列変換.xml