Мне нужен метод расширения, который будет перемешивать IEnumerable<T>
. Он также может принять int
, чтобы указать размер возвращаемого IEnumerable
. Лучше сохранить неизменность IEnumerable
. Мое текущее решение для IList
-
public static IList<T> Shuffle<T>(this IList<T> list, int size)
{
Random rnd = new Random();
var res = new T[size];
res[0] = list[0];
for (int i = 1; i < size; i++)
{
int j = rnd.Next(i);
res[i] = res[j];
res[j] = list[i];
}
return res;
}
public static IList<T> Shuffle<T>(this IList<T> list)
{ return list.Shuffle(list.Count); }