【发布时间】:2010-12-21 10:52:11
【问题描述】:
我需要以随机顺序从一个范围(例如从 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 的数组。我正在寻找不需要内存分配的东西。
谢谢。
【问题讨论】:
-
如果不修改原始列表或分配额外内存,您将无法跟踪重复。这导致用户体验不那么出色。
-
完全同意 Mark Ransom
标签: c# algorithm playlist smart-playlist