tips020

データとツリー⑦
— Shift List

Sets ▸ List ▸ Shift List

リストの項目をまとめて前後にずらすコンポーネント。
ずらして端からはみ出した分を、反対の端へ回すか捨てるかを W で決める。

何をつなぐか

  • L(List)にずらしたいリスト、S(Shift)にずらす数をつなぐ。
    S はつながなければ 1。
  • W(Wrap)は truefalse
    つながなければ true
①がオレンジ、②が青、③が緑の枠。元のリストは3つとも左の 10, 20, 30, 40, 50。パネルの見出しの {0}{0;0} はパス(下の「パスが1段増える」)。クリックで拡大。

どうなる — 並びと数

S=1 / W=true — 5個のまま

{0;0}20, 30, 40, 50, 10

S=1 / W=false — 4個になる

{0;0}20, 30, 40, 50

元のリストはどちらも 10, 20, 30, 40, 50
先頭の 10 が外れて、残りが1つずつ前へ詰まるところまでは同じ。

W = true(既定)外れた 10 が末尾へ回る。項目の数は変わらない
W = false外れた 10 は捨てられる。項目が S の分だけ減る

ずらす向き

S=-1 / W=true

{0;0}50, 10, 20, 30, 40

S が負だと逆向きになる。
末尾の 50 が外れて先頭へ回り、残りが1つずつ後ろへ下がる。

パスが1段増える

L はリストを丸ごと受ける入力なので、出力のパス(リスト1本ごとに付く番号・tips007)が入力より1段深くなる。
図で左のパネルが {0}、右が {0;0} になっているのはこのため。

Shift List{0} のリストを通すと {0;0} になる
Reverse List(Sets ▸ List ▸ Reverse List)同じ1本のリストを通しても {0} のまま。リストを扱うコンポーネントが全部増やすわけではない

パスが2本あるリストを渡しても、ずれ方は1本ずつ別々。
{0;0}10, 20, 30{0;1}1, 2, 3 は、S = 120, 30, 102, 3, 1(出力のパスは {0;0;0}{0;1;0})。

使いどころ

  • 点列の隣どうしを線でつなぐ。
    元の点列を Line(Curve ▸ Primitive ▸ Line)の A に、1つずらした点列を B に渡す。
  • W = true なら、最後の1本が末尾から先頭へ戻って輪が閉じる。
    0,0,0 から 10 間隔に並ぶ4点だと、長さ 10・10・10・30 の4本になる。
  • W = false だと輪は閉じない。
    ずらした側が1つ短いので、最後の1本は同じ点どうしの Invalid Line になる。
  • リストの先頭を落として2番目から使う(S = 1 / W = false)。

注意

W = falseS がリストの長さ以上だと、出力は 0個。5個のリストに S = 5S = 7 を渡すと空で、警告は出ない。
S は整数を受ける入力なので、2.4 は 2、2.5 は 3 に丸められる。この丸めにも警告は出ない。

リストの順番そのものを変える Reverse List / Sort List は、別の tips で扱う。

#データ抽出