Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# LINQ-生成一组随机整数,其总和在一个范围内_C#_Linq - Fatal编程技术网

C# LINQ-生成一组随机整数,其总和在一个范围内

C# LINQ-生成一组随机整数,其总和在一个范围内,c#,linq,C#,Linq,我有一个列表“VisitCores”,在本例中,它需要包含4个随机整数分数,4个分数的总和介于“min”和“max”之间,为了生成一个分数,我必须从“ValueNumber”中提取3个随机整数,因此选择19,15,21将给我55分,我知道如何生成随机单分数,但解决其余的问题让我头疼 var visitScores = new List<int>(); var valueNumbers = new List<int>() { 5, 20, 1

我有一个列表“VisitCores”,在本例中,它需要包含4个随机整数分数,4个分数的总和介于“min”和“max”之间,为了生成一个分数,我必须从“ValueNumber”中提取3个随机整数,因此选择19,15,21将给我55分,我知道如何生成随机单分数,但解决其余的问题让我头疼

        var visitScores = new List<int>();
        var valueNumbers = new List<int>() { 5, 20, 1, 7, 19, 3, 15, 60, 21, 57, 9 };
        var totalVisits = 4;
        var min = 241;
        var max = 261;

        var r = new Random();
        var randomScore = (from int value1 in valueNumbers
                           from int value2 in valueNumbers
                           from int value3 in valueNumbers
                           select (value1 + value2 + value3)).OrderBy(z => r.NextDouble()).First();
var visitScores=new List();
var valueNumbers=新列表(){5,20,1,7,19,3,15,60,21,57,9};
var=4;
var min=241;
var max=261;
var r=新的随机变量();
var randomScore=(来自ValueNumber中的int value1
从ValueNumber中的int value2开始
从ValueNumber中的int value3开始
选择(value1+value2+value3)).OrderBy(z=>r.NextDouble()).First();
我的预期结果是VisitCores包含一组4个随机分数,100(60,19,21),44(20,19,5),73(57,9,7),40(20,15,5),总共257

---------------------------我的LINQ解决方案----------------------

        var randomScores = (from int value1 in valueNumbers
                           from int value2 in valueNumbers
                           from int value3 in valueNumbers
                           select (value1 + value2 + value3)).Distinct().OrderBy(z => r.NextDouble()).ToList();

        var scores = (from int score1 in randomScores
                            from int score2 in randomScores
                            from int score3 in randomScores
                            from int score4 in randomScores
                      where ((score1 + score2 + score3 + score4) > min) && ((score1 + score2 + score3 + score4) < max) &&
                                  new int[] { score1, score2, score3, score4 }
                                  .Distinct().Count() == 4
                      select new List<int>() { score1, score2, score3, score4 }).Distinct().First();
var randomScores=(来自ValueNumber中的int value1
从ValueNumber中的int value2开始
从ValueNumber中的int value3开始
选择(value1+value2+value3)).Distinct().OrderBy(z=>r.NextDouble()).ToList();
var分数=(来自随机分数中的int分数1
从随机分数中的整数分数2开始
从随机分数中的int分数3开始
从随机分数中的int分数4开始
其中((分数1+分数2+分数3+分数4)>min)和((分数1+分数2+分数3+分数4)
我想只选择12个随机数,直到它们的总和在范围内,然后将它们分成3组。我认为这应该行得通。不过,我很难把这一点写进linq的声明中

    int totalNumbers = totalVisits * 3;
    int[] selection = new int[totalNumbers];
    int sum;
    do {
        sum = 0;
        for (int i = 0; i < totalNumbers; ++i) {
            sum += selection[i] = valueNumbers[r.Next(valueNumbers.Length)];
        }
    } while (sum < min || sum > max);
    for (int j = 0; j < selection.Length; j+=3) {
        visitScores.Add(selection[j] + selection[j+1] + selection[j+2]);
    }
int totalNumbers=totalvisions*3;
int[]选择=新的int[totalNumbers];
整数和;
做{
总和=0;
对于(int i=0;i最大值);
对于(int j=0;j
在您的示例中,可以多次选择相同的号码。允许这样做吗?谢谢,但是每个随机分数是否可以由3个随机值数字组成,例如,如果分数为18,则不可能用3个随机值数字构成18 VisitCores。添加(选择[j]+选择[j+1]+选择[j+2]);这将添加一个随机数,该随机数由ValueNumber中的3个随机数组成。在检查总和是否在范围内之前或之后添加它们之间没有区别。酷,我一定忽略了,是的,这是一种享受,我实际上已经想出了如何在linq中使用它,但您的解决方案工作得更好。我很想看到这一版本的linq