tips020
データとツリー⑦
— Shift List
Sets ▸ List ▸ Shift List
リストの項目をまとめて前後にずらすコンポーネント。
ずらして端からはみ出した分を、反対の端へ回すか捨てるかを W で決める。
何をつなぐか
- L(List)にずらしたいリスト、S(Shift)にずらす数をつなぐ。
S はつながなければ 1。 - W(Wrap)は
trueかfalse。
つながなければtrue。
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 = 1 で 20, 30, 10・2, 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 = false で S がリストの長さ以上だと、出力は 0個。5個のリストに S = 5 や S = 7 を渡すと空で、警告は出ない。
S は整数を受ける入力なので、2.4 は 2、2.5 は 3 に丸められる。この丸めにも警告は出ない。
リストの順番そのものを変える Reverse List / Sort List は、別の tips で扱う。