Thread-safe list, array and span shuffle extension library, using Fisher-Yates shuffle and optional cryptographically-strong random.
The recommended means is to use NuGet, but you could also download the source code from here.
var myList = new List<string>();
myList.Add("Item A");
myList.Add("Item B");
myList.Add("Item C");
myList.Shuffle();
var myArray = new string[3];
myArray[0] = "Item A";
myArray[1] = "Item B";
myArray[2] = "Item C";
myArray.Shuffle();
Span<string> mySpan = stackalloc string[3];
mySpan[0] = "Item A";
mySpan[1] = "Item B";
mySpan[2] = "Item C";
mySpan.Shuffle();
If you need cryptographically-strong random in order to shuffle the list, array or span, you can use the CryptoStrongShuffle
method instead. This method is less performant and only use it if you absolutely need to.
var myList = new List<string>();
myList.Add("Item A");
myList.Add("Item B");
myList.Add("Item C");
myList.CryptoStrongShuffle();
var myArray = new string[3];
myArray[0] = "Item A";
myArray[1] = "Item B";
myArray[2] = "Item C";
myArray.CryptoStrongShuffle();
Span<string> mySpan = stackalloc string[3];
mySpan[0] = "Item A";
mySpan[1] = "Item B";
mySpan[2] = "Item C";
mySpan.CryptoStrongShuffle();