Awesome - thank you this works! With one modification...
No matter what I tried I couldn't get the choice1.selector attribute to be affected by the render layer absOverride node. I put the choice node in its own collection, added the overrride, typed in the attribute, set its value - but it just never seemed to affect the actual node.
I put my arrays on an empty transform node similar to your example - so I thought why not use something simple, like that node's transforms, to drive the selector - so connected ArrayHolder.tx to choice1.selector, added ArrayHolder to a collection in the render layer, added an override for the transform, and set the transform override to 1,0,0 and bam, it works!
(choice1.selector as 0 selects the ArrayHolder.SetDiff array, choice1.selector as 1 selects the ArrayHolder.SetIntersect array.)
Screenshot of this attached.
Two side notes about arrays-
Here is the syntax for adding and setting in MEL:
select someNode;
addAttr -ln newAttributeName -dt Int32Array;
setAttr someNode.newAttributeName -type Int32Array 3 2 1 0;
getAttr someNode.newAttributeName;
// Result: 2 1 0
Also, I was totally wrong about thinking the bool operation was a 4 element array - it is 2, but the setAttr command seems to be kinda weird about setting arrays.
Every reference I can find to defining an array in MEL is done by just giving an array its values. But the setAttr command takes the first number as the number of elements in the array.
BUT - setAttr returns some very odd messages if the count is off:
setAttr someNode.newAttributeName -type Int32Array 4 1 0;
// Error: line 1: setAttr: Error reading data element number 6:
element number 6???
setAttr someNode.newAttributeName -type Int32Array 2 1 1 1 1 1;
// Error: line 1: setAttr: Too much data was provided. The last 2 elements were not used.
only the last 2???
So my arrays on the ArrayHolder node are set as follows:
getAttr ArrayHolder.SetDiff;
// Result: 2 2
getAttr ArrayHolder.SetIntersect;
// Result: 2 3
I don't fully understand how the two values are used by the boolean's operation value - but these values work for me.
Thank you again for all your help!