tips022
データとツリー⑧
— Weave
Sets ▸ List ▸ Weave
2本以上のリストを、1本のリストへ交互に並べ直すコンポーネント。
どちらから何個ずつ取るかは P に渡す番号の並びで決まる。
何をつなぐか
- 0(Stream 0)と 1(Stream 1)に、混ぜたい2本のリストをつなぐ。
出力の W(Weave)が混ざったあとのリスト。 - P(Pattern)には、どちらから取るかの番号を並べたリストをつなぐ。
つながなければ0, 1。
0 から始まる。クリックで拡大。どうなる — 取る順番
①P=0,1 — 0 側 A, B, C / 1 側 1, 2, 3
| W 出力 | A, 1, B, 2, C, 3 |
|---|
②P=0,0,1 — 0 側 A, B, C, D / 1 側 1, 2
| W 出力 | A, B, 1, C, D, 2 |
|---|
P は先頭から1つずつ読まれ、末尾まで来たら先頭へ戻って繰り返される。
読んだ番号のストリームから、まだ使っていない先頭の項目を1つ取る。
長さが違うとどうなる
③P=0,1 — 0 側 A, B, C, D, E / 1 側 1, 2
| W 出力 | A, 1, B, 2, C, D, E |
|---|
1 側は2個で尽きる。
そのあとに読まれた P の 1 は飛ばされ、残った 0 側の C, D, E が続けて出る。
尽きた側に null を入れる
既定(Insert nulls がオフ) | 尽きた側は飛ばす。③の出力は7項目 |
|---|---|
Insert nulls をオンにする | 尽きた側の順番に null が入る。③の出力は A, 1, B, 2, C, null, D, null, E, null の10項目 |
Insert nulls はコンポーネントを右クリックすると出る項目。null が入るのは、片方が尽きたあとにその番号を読んだときだけ。①②はどちらでも結果が変わらない。
Merge との違い
| Weave | P の順に1項目ずつ取る。A, 1, B, 2, C, 3 |
|---|---|
| Merge(Sets ▸ Tree ▸ Merge) | リストを順につなげるだけ。A, B, C, 1, 2, 3 |
どちらも A, B, C と 1, 2, 3 を渡した結果。
パスは深くならない
{0} のリスト2本を渡すと、出力も {0}。パス(リスト1本ごとに付く番号・tips007)は深くならない。
リストを丸ごと受ける入力でも1段深くなるとは限らず、Shift List(tips020)とはここが違う。
ストリームは3本以上にできる
- 入力ポートにカーソルを置くと出る
+を押すと、2(Stream 2)が増える。 P=0,1,2で3本から1つずつ。A, B/1, 2/X, YはA, 1, X, B, 2, Yになる。
使いどころ
- 2種類の部材を交互に並べる。
P=0,1なら、出力の並びが 0 側・1 側・0 側…になる。 - 割合を変えて混ぜる。
P=0,0,1なら 0 側2つに対して 1 側1つ。 - 先に出す側を入れ替える。
P=1,0にすると1, A, 2, B, 3, C。 - 片方だけを通す。
P=0だけにするとA, B, Cで、1 側は出力に出ない。
注意
ストリームの数を超える番号や負の番号を P に混ぜると、その番号だけが飛ばされて残りで編まれる。Weave index 2 out of bounds {0 <= i < 2} のエラーが出るが、出力は返る。
ストリームを1本つながないままにすると出力は0個で、Input parameter 1 failed to collect data の警告が出る。
Weave の逆をする Unweave(Sets ▸ List ▸ Unweave)は、別の tips で扱う。