C# 在序列中选择随机数

C# 在序列中选择随机数,c#,math,random,logic,C#,Math,Random,Logic,我想知道如何选择任意六个随机数的逻辑 0到8,如果选择了0,1或1,2或0,2,则不应再次选择0到2中的剩余一个数字。同样,对于3到5系列,如果选择了3,5或3,4或4,5,则不应选择剩余一个数字 例如,在系列0到8中,六个数字可以是0,1,3,5,6,8或1,2,4,5,7,8或0,1,3或4,6等 这些点是一种繁殖点,所以如果所有0-2点都被填满,那么路径将被阻止,玩家可以继续前进 这就是我所做的,这是一种工作,但我认为它可以在灵活性和性能方面得到改进 public static int[]

我想知道如何选择任意六个随机数的逻辑 0到8,如果选择了0,1或1,2或0,2,则不应再次选择0到2中的剩余一个数字。同样,对于3到5系列,如果选择了3,5或3,4或4,5,则不应选择剩余一个数字

例如,在系列0到8中,六个数字可以是0,1,3,5,6,8或1,2,4,5,7,8或0,1,3或4,6等

这些点是一种繁殖点,所以如果所有0-2点都被填满,那么路径将被阻止,玩家可以继续前进

这就是我所做的,这是一种工作,但我认为它可以在灵活性和性能方面得到改进

public static int[] getPointsToSpawn(int howManyToSpawn, int tillWhereToSpawn) {
    int[] howMany = new int[howManyToSpawn];
    List<int> randomCOllected = new List<int>();

    for (int i = 0; i < howManyToSpawn; i++) {

        int randomPoint = generateUniqueRandomNumber(0, tillWhereToSpawn, randomCOllected);
        randomCOllected.Add(randomPoint);

        if (randomCOllected.Contains(0) && randomCOllected.Contains(1) ||
                randomCOllected.Contains(0) && randomCOllected.Contains(2)
                || randomCOllected.Contains(1) && randomCOllected.Contains(2)
                ) {
            randomCOllected.Add(0);
            randomCOllected.Add(1);
            randomCOllected.Add(2);
        } else if (randomCOllected.Contains(3) && randomCOllected.Contains(4) ||
                randomCOllected.Contains(3) && randomCOllected.Contains(5)
                || randomCOllected.Contains(4) && randomCOllected.Contains(5)
                ) {
            randomCOllected.Add(3);
            randomCOllected.Add(4);
            randomCOllected.Add(5);
        } else if (randomCOllected.Contains(6) && randomCOllected.Contains(7) ||
                randomCOllected.Contains(7) && randomCOllected.Contains(8)
                || randomCOllected.Contains(6) && randomCOllected.Contains(8)
                ) {
            randomCOllected.Add(6);
            randomCOllected.Add(7);
            randomCOllected.Add(8);
        }
        howMany[i] = randomPoint;
    }
    return howMany;
}

基本上,我不想在0到2、3到5或6到8的范围内生成超过2个数字

这很简单。你需要三条链子:

选择两个介于0和2之间的随机数 选择两个介于3和5之间的随机数 选择两个介于6和8之间的随机数 您可以查看这篇文章以查看代码示例:

好的,你可以选择6个没有重复的数字,然后对其进行排序。你想知道如何在一个没有重复的范围内生成随机数吗?picks=Enumerable.Range0,8.OrderBy r=>RNG.Next.Take6.ToArray我想。有点难说你们在问什么谢谢大家的快速重播,我用我到目前为止试过的方法编辑了这个问题,虽然它似乎有效,但有开销和性能损失…增加了我为什么要这样做的原因…任何改进的建议都会很高兴听到