Pattern sharing value

hey is there a pattern function for selecting a value from a list with the same index used for another pattern

for example

Pxrand([ 3,2,4,5],inf) and Pxrand([30,20,40,50],inf)

that selects for both the same index 2 and 20 or 5 and 50 in the same event

hope this make sense, thanks !!

perhaps my structure can be changed to remove the need for it

There are many ways to do this, e.g.:

Pbind(
	\x, Pindex((2..5), Pxrand((0..3), inf)),
	\y, Pkey(\x) * 10
).asStream.nextN(10, ())


Pbind(
	\x, Pxrand((0..3), inf).collect { |i| (2..5)[i] },
	\y, Pkey(\x) * 10
).asStream.nextN(10, ())

// same with partial application syntax

Pbind(
	\x, Pxrand((0..3), inf).collect((2..5)[_]),
	\y, Pkey(\x) * 10
).asStream.nextN(10, ())


Pbind(
	\a, Pxrand((2..5), inf),
	\x, Pkey(\a),
	\y, Pkey(\a) * 10
).iter.nextN(10, ())

Pbind(
	\a, Pxrand([(2..5), (2..5) * 10].flop, inf),
	\x, Pkey(\a).collect(_[0]), 
	\y, Pkey(\a).collect(_[1])  
).asStream.nextN(10, ())

Note that this construction in a Pbind can be simplified:

    [\x, \y], Pkey(\a)

… which, then, in this example means that \a and the Pkey could be dropped, though that may not apply to other situations.

One approach that I use often, but which isn’t obvious, is to calculate an array index under one key and then use Pindex or Pswitch1 with different arrays:

\index, Pwhite(0, oneArray.size - 1),
\x, Pindex(oneArray, Pkey(\index)),
\y, Pindex(otherArray, Pkey(\index)),

hjh

1 Like

i was wondering if a key from pbind (using pkey) could be sent as another argument , thanks heaps !! I put it all together now