tips006
データとツリー③
— Graft / Flatten
Sets ▸ Tree ▸ Graft Tree / Flatten Tree
リストの区切り方を変えるコンポーネント。
Graft は1項目ずつ別のリストに分け、Flatten は全部を1本に戻す。
何をつなぐか
- Graft Tree は入力が T(Tree)の1つだけ。分けたいデータをつなぐ
- Flatten Tree も T につなぐ。P(Path)は戻したあとの行き先を決める入力で、既定値が入っているのでつながなくてよい
① Graft を通す
- 10・20・30 の3個が入ったリストを、Graft Tree の T につなぐ(図①の①)
Before1リスト × 3項目
| {0} | 10 | 20 | 30 |
|---|
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} | 10 | 20 | 30 |
|---|
パスは {0} 1つに戻り、項目は元の順に並ぶ。
つなぐ相手の組み合わせが変わる
10・20・30 と 1・2・3 の2つのリストを、Addition の A と B につないで足す。
同じ2つでも、間に Graft を挟むかどうかで出てくる数が変わる。
Beforeそのまま — 3個
| {0} | 11 | 22 | 33 |
|---|
AfterA を Graft — 9個
| {0;0} | 11 | 12 | 13 |
|---|---|---|---|
| {0;1} | 21 | 22 | 23 |
| {0;2} | 31 | 32 | 33 |
そのままだと、上から順に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 で扱う。