随机化列表的问题

时间:2014-02-25 11:38:23

标签: c# list random

所以我试图以随机顺序将一个数组复制到一个列表中,并且它“有点”工作,我得到一个随机顺序输出,除了它似乎不是“完全”随机的,也就是说,有一些数字序列似乎重复多次,特别是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);
        }
    }
}

1 个答案:

答案 0 :(得分:0)

这里发生的是您根据数字的概率小于0到51之间的随机数对数组进行排序。 在你的情况下,OrderBy函数返回一个布尔值为True或False,内部实现的工作原理是排序的数组将在开头具有所有false,后跟所有true。您可以通过对布尔值列表进行排序来查看。在您的情况下,您选择0到51之间的随机数,然后将其与您的数字进行比较。检查x < RNG.Next(52)返回True的概率对于小数字而言要高得多,而对于大数字则为False。因此,您实际上将较大的数字放在数组的开头,而较小的数字放在数组的末尾,并且具有一些随机性。

关于种子问题。它不直接相关,因为在创建Random实例时会确定种子一次。