Datatableを複数条件で並び替え

Continuing the discussion from データテーブルを並び替えで複数条件:

UiPath初心者です。
①英数字の列
②日付の列
の順で並び替えを希望しております。

こちらのトピックでの解決案の方が、
「値が整数値の場合」とありましたので、
変更箇所等、教えて頂きたくよろしくお願いいたします。

ここに詳しく記述されていますが、ダイジェスト。
1)DataView型の変数を用意する
2)DataView view = new DataView(locationTable);とし、DataTableをDataViewに格納する
3)view.Sort = “State ASC, ZipCode ASC”;のように、"英数字の列△ASC,日付の列△ASC"にてSORTする
4)locationTable ← view.ToTableのように代入アクティビティで代入する。

1 Like

例えば、A列 と B列 があったとして、

  • B列を並び替え
  • 並び替えされたデータのA列を並び替え

というように、優先度の低い並び替え→優先度の高い並び替え、の順に並び替え処理していけば、同じ結果が得られるのではないかと思います。こうすれば、上記のようにDataViewを使う必要がなく、アクティビティを並び替えたい列の数、配置するだけで済むため、ワークフローの可読性も高い(あとから保守するときにもわかりやすい)と思います。

2 Likes

あ、本当だ。入力順番は保証されるのか。。。知らなかった。( …)φメモメモ

おはようございます。
ありがとうございます。

初心者レベルの話にすると、以下であってますか?
image

1 Like

はい、そのイメージであってます。実際に試していただくと、ご要望どおりの動きになっているのではないかと思います。
余談ですが、Excelで並び替えをするときにも同じような手順が利用できます(私は手作業のとき、ほとんどこの方法で操作してます)。

1 Like

これまでの動きを見ている限りだと安定ソートのようで、先にソートした順序が(その次にソートされたときに)維持されてますね。なので、今回の方法でもいちおう実現は可能かなと。ソートしたい列の数や、可変性の点からはDataViewとかのほうがいいのかもしれないですね。

ちなみに過去、↓のような実装をしたことがあります。いちおうこれなら列数や可変性もそれなりに確保できそうだな、と。。。

  • ソート対象列の列名を、ソートの優先度が高い順に配列(colNames)に格納する
  • For each を配置して、コレクションに colNames.Reverse を指定する // これで配列内の要素の順序を逆転させ、優先度が低い順にする
    • For each 内で、取り出される要素を用いてソート処理をする
2 Likes

なるほどなるほどです!!

本当に勉強になりました。
ありがとうございました。

This topic was automatically closed 3 days after the last reply. New replies are no longer allowed.