SharedArrayExtension.cs 758 B

12345678910111213141516171819202122232425262728
  1. using Robust.Shared.Random;
  2. namespace Content.Shared;
  3. public static class SharedArrayExtension
  4. {
  5. /// <summary>
  6. /// Randomizes the array mutating it in the process
  7. /// </summary>
  8. /// <param name="array">array being randomized</param>
  9. /// <param name="random">source of randomization</param>
  10. /// <typeparam name="T">type of array element</typeparam>
  11. public static void Shuffle<T>(this Span<T> array, IRobustRandom? random = null)
  12. {
  13. var n = array.Length;
  14. if (n <= 1)
  15. return;
  16. IoCManager.Resolve(ref random);
  17. while (n > 1)
  18. {
  19. n--;
  20. var k = random.Next(n + 1);
  21. (array[k], array[n]) =
  22. (array[n], array[k]);
  23. }
  24. }
  25. }