Мне нужен метод расширения, который будет перемешивать 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); }
< >
они обычно должны быть отформатированы как код: либо в строке с обратными кавычками (как я добавил), либо (как вы это сделали) с отступом из четырех пробелов - person AakashM   schedule 27.04.2011