Мне нужно создать список чисел из диапазона (например, от x до y) в случайном порядке, чтобы каждый порядок имел равные шансы.
Мне нужно это для музыкального плеера, который я пишу на С#, для создания списков воспроизведения в случайном порядке.
Любые идеи?
Спасибо.
EDIT: Меня не интересует изменение исходного списка, просто выберите случайные индексы из диапазона в случайном порядке, чтобы каждый заказ имел равные шансы.
Вот что я до сих пор писала:
public static IEnumerable<int> RandomIndexes(int count)
{
if (count > 0)
{
int[] indexes = new int[count];
int indexesCountMinus1 = count - 1;
for (int i = 0; i < count; i++)
{
indexes[i] = i;
}
Random random = new Random();
while (indexesCountMinus1 > 0)
{
int currIndex = random.Next(0, indexesCountMinus1 + 1);
yield return indexes[currIndex];
indexes[currIndex] = indexes[indexesCountMinus1];
indexesCountMinus1--;
}
yield return indexes[0];
}
}
Он работает, но единственная проблема заключается в том, что мне нужно выделить массив в памяти размером count
. Я ищу что-то, что доза не требует выделения памяти.
Спасибо.