// NOTE: Fisher–Yates Shuffle (algorithm) public static void Shuffle <T>(this T[] array) { if (null == array) { return; } int count = array.Length; for (int n = 0; n < count; ++n) { int indexToSwap = SystemExtension.RandomRange(n, count); T oldValue = array[n]; array[n] = array[indexToSwap]; array[indexToSwap] = oldValue; } }