tips022

データとツリー⑧
— Weave

Sets ▸ List ▸ Weave

2本以上のリストを、1本のリストへ交互に並べ直すコンポーネント。
どちらから何個ずつ取るかは P に渡す番号の並びで決まる。

何をつなぐか

  • 0(Stream 0)と 1(Stream 1)に、混ぜたい2本のリストをつなぐ。
    出力の W(Weave)が混ざったあとのリスト。
  • P(Pattern)には、どちらから取るかの番号を並べたリストをつなぐ。
    つながなければ 0, 1
①が茶、②が青、③が緑の枠で、本文の①②③に対応する。左の3つのパネルは上から P01 の順。右のパネルの左端の列は項目の番号で、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個で尽きる。
そのあとに読まれた P1 は飛ばされ、残った 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 との違い

WeaveP の順に1項目ずつ取る。A, 1, B, 2, C, 3
Merge(Sets ▸ Tree ▸ Merge)リストを順につなげるだけ。A, B, C, 1, 2, 3

どちらも A, B, C1, 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, YA, 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 で扱う。

#データツリー