まず大事なこと
predicateは、各要素ごとに1回ずつ評価されます- 結果が
trueなら残り、falseなら捨てられます - つまり
list = [0.25, 0.75, 1.25]でpredicate = item >= 0.75なら、0.25 >= 0.75はfalseなので捨てる0.75 >= 0.75はtrueなので残す1.25 >= 0.75はtrueなので残す という動きになります
使える名前一覧
| 名前 | 意味 | 例 |
|---|---|---|
item |
今見ている要素そのもの | item >= 0.75 |
index |
何番目の要素か。0始まりです | index % 2 == 0 |
count |
全体の要素数です | index < count - 1 |
x, y, z, w |
補助入力ピン、または Inspector で与える数値です | item >= x |
vec, vx, vy |
補助 Vec2 入力、または Inspector の vec_x, vec_y です |
length(vec) > item |
flag |
補助 Bool 入力、または Inspector の既定値です | flag && item > 0 |
time, frame, total_frames |
評価時の時刻情報です | frame % 2 == 0 |
Map 要素の時
要素が Map の時は、そのキー名をそのまま条件式に書けます。
たとえば要素がこうなら:
{ "index": 0, "value": 0.25 }
条件式の中でそのままこう書けます。
value < 0.5
index == 0
よくある入力ごとの読み方:
| 入力元 | 要素の形 | 条件式で使える名前 |
|---|---|---|
| 普通の数値リスト | 0.25, 0.75, 1.25 |
item, index, count |
ListEnumerate |
{ "index": 0, "item": 10 } |
index, item |
ListZip |
{ "index": 0, "a": 1, "b": 10 } |
index, a, b |
CartesianProduct |
複数キーの Map | 各キー名をそのまま使えます |
よく使う条件式
item >= 0.75- しきい値以上だけ残します
index % 2 == 0- 偶数番目だけ残します
item >= x- 外から与えたしきい値より大きい要素だけ残します
value < 0.5 && index == 0- Map の複数条件で絞ります
a * 10 == bListZipの2本の関係で絞ります
具体例
例1: 0.75 以上だけ残す
入力:
[0.25, 0.75, 1.25]
設定:
item_type = Floatpredicate = item >= 0.75
出力:
list = [0.75, 1.25]
count = 2
例2: ListZip の結果から一部だけ残す
入力:
[
{ "index": 0, "a": 1, "b": 10 },
{ "index": 1, "a": 2, "b": 20 }
]
設定:
item_type = Mappredicate = a * 10 == b
出力:
list = [
{ "index": 0, "a": 1, "b": 10 },
{ "index": 1, "a": 2, "b": 20 }
]
count = 2
例3: 偶数番目だけ残す
入力:
[10, 20, 30, 40, 50]
設定:
item_type = Numberpredicate = index % 2 == 0
出力:
list = [10, 30, 50]
count = 3
例4: 変数や補助入力をしきい値として使う
入力:
[0.25, 0.75, 1.25]
設定:
item_type = Floatpredicate = item >= xx = 0.75
出力:
list = [0.75, 1.25]
count = 2
x は Inspector で直接入れてもよいですし、Variable Ref を x 入力ピンへつないでも使えます。
どういう時に使うか
- 量産候補から条件に合うものだけ残したい時
BatchRenderに送る前に候補数を絞りたい時
注意
- v1 は constrained expression ベースです
- 任意 subgraph を predicate として回す用途ではありません
Map要素のキー名とx,y,z,w,vec,flagが同名の時は、補助入力側の名前が優先されます