cs-codex-dist-tests/Framework/Utils/RandomUtils.cs

44 lines
1.1 KiB
C#
Raw Permalink Normal View History

namespace Utils
{
public static class RandomUtils
{
private static readonly Random random = new Random();
2024-09-30 13:23:14 +00:00
private static readonly object @lock = new object();
2024-10-10 09:45:04 +00:00
public static T GetOneRandom<T>(this T[] items)
{
lock (@lock)
{
var i = random.Next(0, items.Length);
var result = items[i];
return result;
}
}
public static T PickOneRandom<T>(this List<T> remainingItems)
{
2024-09-30 13:23:14 +00:00
lock (@lock)
{
var i = random.Next(0, remainingItems.Count);
var result = remainingItems[i];
remainingItems.RemoveAt(i);
return result;
}
}
2024-08-20 09:44:15 +00:00
public static T[] Shuffled<T>(T[] items)
{
2024-09-30 13:23:14 +00:00
lock (@lock)
2024-08-20 09:44:15 +00:00
{
2024-09-30 13:23:14 +00:00
var result = new List<T>();
var source = items.ToList();
while (source.Any())
{
result.Add(RandomUtils.PickOneRandom(source));
}
return result.ToArray();
2024-08-20 09:44:15 +00:00
}
}
}
}