【vvvv】Spreadって何?Spreadの扱い方

More than 3 years have passed since last update.

こんにちは。

今日はSpreadまわりのお話です。

少し長くなりますので、とりあえず読みながら実践してみることをお勧めします。

で、一発で全部読み切る必要はないです。

使っていると「あれ、これどうやるんだっけ?」と思うことになると思いますので、その時に戻ってくればいいのです。


ところでSpreadってなんだっけ?

さて、ここでSpreadってなんだっけという至極当然の疑問が生まれます。

Spreadとは値をまとめて扱う概念です。

値の集まりをSpread、その要素ひとつひとつをSliceと呼びます。

例えば[2,4,6,8,10]だったら

「5個の値を持つSpreadだね」という呼ばれ方をして

「0番目のSliceの値は2で、3番目のSliceの値は8だね」と言ったりします。

Sliceの数え方は0番目から始まるので注意してください。

プログラミング言語に精通してる方には「つまり配列みたいなもんです」というと一発で通じてしまうでしょうか。


spreadを見てみよう

なんにせよ見てみないとわからないののは世の常ですね。

p2.PNG

まずおなじみのI/Oボックス(数字が入っているボックス)ともう一つノードがあります。

「I -Spreads」というノードです。

これは左のインレット[From]から中央のインレット[To]までを順番にSpreadで出力してくれます。

これをI/Oボックスで表示させているだけです。

さてここで、「IOボックス繋いでも、1つしか値が表示されないよ!」という声が聞こえてきそうです。落ち着いてください。

Spreadを表示させるI/Oボックスを選択して「Ctrl+I」を押してみてください。

インスペクタというウィンドウが表示されます。

pp1.png

画像黄色の部分「Rows」の値を適度に上げてみましょう。

そうするとSpreadの値を多く表示することができます。

なお画像の青でかこった部分を操作すると、I/Oボックスの中に枠を出したり、Index(何番目のSliceかを示す値)を出すことができます。


任意のSliceをSpreadの中から取り出したい。

さて、Spreaの中にはたくさんの値が入るわけですが、その中から特定のSliceの値をとってきたいこともあるわけですね。

そんなときはGetSliceを使いましょう。

こんな感じです。

pp2.PNG

Spreadは5の倍数になってますね。ここから3番目のSliceを取り出すということをやっています。何度も書きますが3番目というのは、0番目から数えての3番目ですよ!


Spreadから複数のSliceを取り出す。

何番目の値を取り出すか、という部分にSpreadで値を指定してあげると、複数のSliceを取り出すことができます。

pp3.PNG

画像では0番目、5番目、8番目の値を取り出していますね。

何度も何度も言いますが、0番目から数えて何番目かを指定するということを、今日何度も言っておきます。

実はGetSliceは奥が深くて、vvvvユーザーでも戸惑うことがよくあります。

今回はそこまで紹介しませんが、そんなこともあります。


Spreadを振り分ける。

たとえばSpreadで座標を受け渡すなんてことは、vvvvでは日常的にあるわけですが、

それぞれx,yを分けて上げる必要があるときなんてあるかもしれません。

たとえば1つ目の座標が(1,5)d二つ目の座標が(2,3)なら

[1,5,2,3]というSpreadになったりしますね。

これをxの座標のみ、y座標のみで分ける必要がある時がありますね。

そんな時はVector(2d Split)を使いましょう。

pp4.PNG

x,yにそれぞれ分けることができたりします。


Vector(Split/Join)とConsとUnzip

さて、値を分けることができるのはVectorだけではありません。

UnzipというノードでもSpreadを分けることができます。

そしてその逆、SliceをくっつけてSpreadにする方法ももちろんあります。

それが、Vector(2d Join)とConsです。しかし、この二つは少し挙動が違います。

q1.PNG

UnzipとVector(2d Split)とUnzipでは、同じようにSliceに分けることができました。

しかし、Cons(2d)とVector(2d Join)では結果が違ってきます。

Cons(2d)では、左のインレットのSpreadと、右のインレットのSpreadを単純に結合させます。

(2d Join)では、左のインレットのSpreadのn番目のSliceと、右ののインレットSpreadのn番目のSliceを順に結合させてゆきます。

最初は面倒な違いかもしれまが、違いがあるからこそ、利用性があります。

覚えておくと使えるときがくるかもしれません。


便利なUnzip

p1.png

それはともかく、Spreadのすべてをピンに分けて出力したいんだよ、という場合はUnzipを使いましょう。

Unzipを出したら「Ctrl+I」でインスペクタを出したらば、画像の黄色の場所の値を上げます。すると、値の数だけピンが出て、Spreadの値をそのままピンから取り出すことができます。


まとめ

さて、一番重要なことは、覚えることではありません。

こんな機能があったなぁとだけでもわかっていれば、調べればOkなのです。

で、調べてもわからないときはお気軽にTwitterで #vvvv_jp をつけて質問しましょう。

我々はこのタグを監視していますので、そのうち返信があるはずです。

もちろん私に直接聞いていただいても大丈夫ですよ。 @AquaLamp

よきvvvvLifeを。