C# 随机化列表的问题

C# 随机化列表的问题,c#,list,random,C#,List,Random,所以我试着将一个数组以随机顺序复制到一个列表中,它“有点”起作用,我得到了一个随机顺序输出,但它似乎不是“完全”随机的,也就是说,有一些数字序列似乎重复了很多次,特别是1-9。现在,它们并不总是以一个序列出现,序列相对于其他数字的位置也发生了变化,但我看到它们在“随机列表”中出现的次数异常 这是我的密码: class Program { static void Main(string[] args) { int[] originalDeck = new int[5

所以我试着将一个数组以随机顺序复制到一个列表中,它“有点”起作用,我得到了一个随机顺序输出,但它似乎不是“完全”随机的,也就是说,有一些数字序列似乎重复了很多次,特别是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);
        }
    }
}
类程序
{
静态void Main(字符串[]参数)
{
int[]originalDeck=新int[52];
对于(int i=1;ix
这里发生的事情是,根据数字小于0到51之间的随机数的概率对数组进行排序。 在您的例子中,OrderBy函数返回一个布尔值True或False,内部实现的工作方式是,排序后的数组将在开头包含所有False,然后是所有True。通过对布尔值列表进行排序,可以看到这一点。在您的情况下,您可以选择一个介于0和51之间的随机数,然后将其与您的数字进行比较。对于小数字,检查
x
返回True的概率要高得多,对于大数字,检查
x
返回False的概率要高得多。因此,您实际上是将较大的数字放在数组的开头,将较小的数字放在数组的末尾,并且带有一定的随机性


关于种子问题。它不是直接相关的,因为种子在创建随机实例时只确定一次。

您可能希望查找一些方法来对列表进行随机化,例如:这是因为
Random
与seedRight的时间戳一起工作,但我没有重新初始化
Random
,它正在为循环的每次迭代调用
Next()
,这不是正确的方法吗?试试这个:
List split1=originalDeck.OrderBy(x=>RNG.Next()).ToList()
对不起,英语不是我的第一语言