Ruby Union and Intersection operators

Pipe | (Union) / Ampersand & (Intersection)

&: intersection OR overlap

The ampersand is an array method that returns the overlapping items.

ary & other_ary → new_ary

Also known as Set Intersection

Returns a new array containing elements common to the two arrays, excluding any duplicates. The order is preserved from the original array.

[ 1, 1, 3, 5 ] & [ 1, 2, 3 ]                 #=> [ 1, 3 ]
[ 'a', 'b', 'b', 'z' ] & [ 'a', 'b', 'c' ]   #=> [ 'a', 'b' ]

| union OR merge and de-duplicate

The pipe is an array method that will merge the two arrays and maintain order(from the first array) if a duplicate exists in the second array.

ary | other_ary → new_ary

Also known as Set Union

Returns a new array by joining ary with other_ary, excluding any duplicates and preserving the order from the original array.

[ "a", "b", "c" ] | [ "c", "d", "a" ]    #=> [ "a", "b", "c", "d" ]