首页 > 解决方案 > 创建包含 50 个项目的随机数组/只有 0 和 1

问题描述

我需要这样编码;

将有一个随机包含 50 个项目(只有 0 和 1)的数组。每行有 5 个项目,总共有 10 行。Level1:每行有 4 个零和 1 个(如 001000;10000;010000;00010 等) Level2:每行有 3 个零和 2 个(如 01010;11000;00011;10010 等)这将继续,以便..

实际上,0 代表绿色,1 代表红色。我将制作一个包含 5x10 按钮的游戏。当用户单击绿色按钮时,他将被传递到下一行。如果他点击红色按钮,他将失败。

我写了一些东西,但这不是我想要的。请帮忙 :(

 int maxGreenCount = 5;
int maxRedCount = 1;

public int GenerateNumber()
{
    int numbervalue;

    numbervalue = Random.Range(0, 2);
    return numbervalue;
}

public int[] GenerateRow()
{
    int[] rowfinal = new int[50];

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

        for (int j = 0; j < 4; j++)
        {

            if (GenerateNumber() == 0)
            {
                if (greenCount < maxGreenCount)
                {
                    rowfinal[i] = 0;
                    greenCount++;
                }

            }

            if (GenerateNumber() == 1)
            {
                if (RedCount < maxRedCount)
                {
                    rowfinal[i] = 1;
                    RedCount++;
                }

            }

            RedCount = 0;
            greenCount = 0;
        }
    }
    return rowfinal;
}

我期望这个:

在此处输入图像描述

标签: c#

解决方案


使用 Linq:

            Random rand = new Random();

            var results = Enumerable.Range(1,4)
                .Select(level => Enumerable.Range(1,10).Select(row => Enumerable.Repeat(1,level).Concat(Enumerable.Repeat(0, 5 - level))
                    .Select(column => new { column = column, rand = rand.Next() }).OrderBy(x => x.rand).Select(x => x.column).ToArray())
                    .ToArray())
                    .ToArray();

下面给出了一个二维数组

            int[][] results = Enumerable.Range(1, 4)
                .Select(level => Enumerable.Range(1, 10).SelectMany(row => Enumerable.Repeat(1, level).Concat(Enumerable.Repeat(0, 5 - level))
                    .Select(column => new { column = column, rand = rand.Next() }).OrderBy(x => x.rand).Select(x => x.column)).ToArray())
                    .ToArray();

推荐阅读