我需要创建一个数字列表,列表中的数字是从给定范围(例如从x到y)内以随机顺序出现的,并且每种排列方式具有相等的概率。
我需要在C#中编写的音乐播放器中使用此功能来创建随机播放列表。
有什么想法吗?
谢谢。
编辑: 我不打算改变原始列表,只需从范围内以随机顺序选择随机索引,以便每种排列方式具有相同的概率。
这是我已经编写的内容:
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
的数组。我正在寻找不需要内存分配的东西。
谢谢。