我需要以随机顺序从一个范围(例如从 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
. 我正在寻找不需要内存分配的东西。
谢谢。