すべての順序が同じ確率になるように、ランダムな順序で範囲(たとえば、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
。メモリ割り当てを必要としないものを探しています。
ありがとう。