tips006

データとツリー③
— Graft / Flatten

Sets ▸ Tree ▸ Graft Tree / Flatten Tree

リストの区切り方を変えるコンポーネント。
Graft は1項目ずつ別のリストに分け、Flatten は全部を1本に戻す

何をつなぐか

  • Graft Tree は入力が T(Tree)の1つだけ。分けたいデータをつなぐ
  • Flatten Tree も T につなぐ。P(Path)は戻したあとの行き先を決める入力で、既定値が入っているのでつながなくてよい
元のリストは左のパネルの 10・20・30。①が Graft を通した形、②が①を Flatten で戻した形、③が Graft をもう1回通した形。クリックで拡大。

① Graft を通す

  • 10・20・30 の3個が入ったリストを、Graft Tree の T につなぐ(図①の①)

Before1リスト × 3項目

{0}102030

After3リスト × 1項目

{0;0}10
{0;1}20
{0;2}30

{0} はリストの通し番号で、パスと呼ぶ。
Graft はこのパスを1段増やす
元のリストで 0番目だった 10 が {0;0}、1番目の 20 が {0;1} に入る。
中身の 10・20・30 は動いていない。

② Flatten を通す

  • ①で分かれたデータを、そのまま Flatten Tree の T につなぐ(図①の②)

After元と同じ 1リスト × 3項目

{0}102030

パスは {0} 1つに戻り、項目は元の順に並ぶ。

つなぐ相手の組み合わせが変わる

10・20・30 と 1・2・3 の2つのリストを、Addition の AB につないで足す。
同じ2つでも、間に Graft を挟むかどうかで出てくる数が変わる。

①がそのまま、②が A 側に Graft Tree を挟んだ形、③が A 入力を右クリックで Graft にした形。②と③の結果は同じ。クリックで拡大。

Beforeそのまま — 3個

{0}112233

AfterA を Graft — 9個

{0;0}111213
{0;1}212223
{0;2}313233

そのままだと、上から順に1対1で組む。
A を Graft すると A の1項目ずつが別のリストになり、そのそれぞれに B の3項目が当たる。

数は掛け算で増える。
3個と3個で9個、10個と10個なら100個になる。

コンポーネントを置かずに切り替える

  • 入力・出力のどちらのポートでも、右クリックのメニューに Reverse / Flatten / Graft / Simplify が続けて並んでいる
  • Graft を選ぶと、そのポート名の脇に上向き矢印の小さなマークが付く。
    Flatten なら下向き矢印
入力ポート → Graft入ってきたデータを分けてから使う。図②の③は Addition の A をこの方法にしたもので、図②の②と同じ9個になる
出力ポート → Graft出ていくデータを分ける。マークは出力名の右側に付く
Graft Tree / Flatten Tree を置くどこで構造が変わるかが配線に残る。ポートのマークは小さいので、見落としたくない場所ではコンポーネントを置く

使いどころ

  • 1つずつを別扱いにする。
    点を Graft してから Move につなぐと、点ごとに全部のベクトルが当たる。
  • まとめて1つの形にする。
    Flatten してから PolyLine につなぐと、分かれていた点が1本の線になる。
  • 結果の数が合わないときに確かめる。
    Panel につないでパスを見ると、どこで分かれたのか・1本になったのかが読める。

注意

Flatten は元の区切りを捨てる。
{0;0}{0;2} を通すと {0} の3項目になり、どこで切れていたかは残らない。
Graft は通すたびにパスが1段増える。
同じデータに2回通すと {0;0;0} {0;1;0} {0;2;0} になり(図①の③)、下流の組み合わせ方もそのぶん変わる。

パスそのものの読み方は、用語ひとこと辞典の Data Tree で扱う。

#データツリー