所以我试图以随机顺序将一个数组复制到一个列表中,并且它“有点”工作,我得到一个随机顺序输出,除了它似乎不是“完全”随机的,也就是说,有一些数字序列似乎重复多次,特别是1-9。现在它们并不总是出现在序列中,并且序列相对于其他数字的位置发生了变化,但我发现它们对于“随机列表”看起来是异常的次数。
这是我的代码:
class Program
{
static void Main(string[] args)
{
int[] originalDeck = new int[52];
for (int i = 1; i < originalDeck.Length+1; i++)
{
originalDeck[i-1] = i;
}
Random RNG = new Random();
List<int> split1 = originalDeck.OrderBy(x => x < RNG.Next(52)).ToList();
PrintList1(split1);
Console.ReadKey();
}
static void PrintList1(List<int> split)
{
foreach (int card in split)
{
Console.WriteLine(card);
}
}
}
答案 0 :(得分:0)
这里发生的是您根据数字的概率小于0到51之间的随机数对数组进行排序。
在你的情况下,OrderBy函数返回一个布尔值为True或False,内部实现的工作原理是排序的数组将在开头具有所有false,后跟所有true。您可以通过对布尔值列表进行排序来查看。在您的情况下,您选择0到51之间的随机数,然后将其与您的数字进行比较。检查x < RNG.Next(52)
返回True的概率对于小数字而言要高得多,而对于大数字则为False。因此,您实际上将较大的数字放在数组的开头,而较小的数字放在数组的末尾,并且具有一些随机性。
关于种子问题。它不直接相关,因为在创建Random实例时会确定种子一次。