Match list with reshuffle

I was wondering whether glide has ability to match random value with another value but not its own?
For example.
I have 4 ID, “A,B,C,D”
I want to reshuffle with result of
A - C
B - A
C - D
D - B

With reshuffle sometimes I will get
A - A
B - C
C - C

I want to avoid that same values match.
Anyone have solutions?