C# 生成每个数字组合

C# 生成每个数字组合,c#,C#,我有一个包含100个元素的数组,其中我随机选取了4个元素。同一个元素不能被选取两次。我重复这个过程很多次,试图得到每一个可能的组合。但一定有更有效的方法 我该如何创建一个循环来创建所有可能的组合 double[][] picked = new double[4][]; int[] chosen = new int[4]; Random rnd = new Random(); List<int> exclude = new List<int>(); int z = 0; w

我有一个包含100个元素的数组,其中我随机选取了4个元素。同一个元素不能被选取两次。我重复这个过程很多次,试图得到每一个可能的组合。但一定有更有效的方法

我该如何创建一个循环来创建所有可能的组合

double[][] picked = new double[4][];
int[] chosen = new int[4];
Random rnd = new Random();
List<int> exclude = new List<int>();
int z = 0;
while (z < 4)
{
    picked[z] = new double[rows];
    int x = rnd.Next(0, rows);
    if (exclude.Contains(x))
    {
        continue;
    }
    exclude.Add(x);

    // do stuff with the chosen elements

    z++;
}
编辑:作为重复链接到的问题是不同的,因为它允许选择重复的元素


在这里找到我的anwser:

当你说同一个元素不能被拾取两次时,你的意思是你不能有,例如,1,2,3,2,因为2已经存在?如果生成元素的顺序很重要,并且不能重复,则称为无重复的置换。以下是对该理论的参考: 关于您的循环案例,这可能会有所帮助:

在Algo中存在一个问题,即大小为N.1的虚拟令牌的所有置换/子集与找到它的虚拟令牌的所有可能组合是什么?那些随机挑选的4个元素?这4种元素与其他100种元素的对比?你能告诉我们你自己尝试过什么吗?这种感觉就像我们在做你的家庭作业。@xdtTransform,这里是@Jordec添加的代码,我的家庭作业完成了,代码工作了,我只是想让它更有效。是的,这就是我的意思,顺便说一句,顺序不重要,所以选择元素0,1,2,3与3,2,1,0或1,2,0,3是一样的,因为它仍然是相同的元素,将被比较。只有像1、2、3、2这样的东西是不允许的,因为它将其中一个元素与自身进行比较。