C# 运行C中一系列值的所有可能组合

C# 运行C中一系列值的所有可能组合,c#,loops,iteration,C#,Loops,Iteration,我有一个参数类,它的属性范围从最小值到最大值不等 class Parameter { public int Min { get; set; } public int Max { get; set; } public int Value { get; set; } } 然后我有一个参数列表,例如: var Params = new List<Parameter>(); Params.Add(new Parameter { Min = 7, Ma

我有一个参数类,它的属性范围从最小值到最大值不等

class Parameter
{
    public int Min { get; set; }
    public int Max { get; set; }
    public int Value { get; set; }
}
然后我有一个参数列表,例如:

    var Params = new List<Parameter>();
    Params.Add(new Parameter { Min = 7, Max = 12, Value = 9 });
    Params.Add(new Parameter { Min = 18, Max = 24, Value = 21 });
    Params.Add(new Parameter { Min = 49, Max = 60, Value = 54 });
我的问题是,我需要使用每个参数值的所有可能组合运行一些代码,例如,将参数1的值设置为7、8、。。。到12岁

我还需要代码来处理列表中未定义数量的参数在本例中只有3个,但可能还有更多。显然,工作量将随着列表中参数的数量呈指数增长


我假设我需要某种递归函数。有人对最好的方法有什么建议吗?

你有一个参数列表,所以从这个开始吧 使用foreach循环,这里是算法

For each parameter
    start from min and increment by one untill you reach max
         assign to value to perform function 
         (code or function to run with value as param here)
    finish this loop (it can be while or for loop)
finish this loop (for each loop in c# would do)

试试这个,让我们知道。从你的问题来看,目前还不清楚你尝试了什么。我的答案基于您目前提供的内容。

有什么原因使您不能执行简单的foreach循环吗

foreach (Parameter param in Params)
{
   DoCalculation(param)
}
然后你的函数会像这样,带有一个for循环

public void DoCalculation (Parameter param)
{
   for (int i = param.Min; i <= param.Max; i++)
   {
      param.Value = i;
      //Do Calculation necessary
   }
}

您可以使用如下递归函数:

public static void IterateParams(Parameter[] parameters, int depth = 0)
{
    // If we had iterated each parameter
    if (depth == parameters.Length)
    {
        // Then do something with values, for example print it
        int[] values = parameters.Select(p => p.Value).ToArray();
        Console.WriteLine(string.Join(", ", values));
    }
    else // Else iterate through the values of the next parameter
    {
        var parameter = parameters[depth];

        for (int i = parameter.Min; i <= parameter.Max; i++)
        {
            parameter.Value = i;
            IterateParams(parameters, depth + 1);
        }
    }
}

public static void Main()
{
    var Params = new List<Parameter>();
    Params.Add(new Parameter { Min = 7, Max = 12, Value = 9 });
    Params.Add(new Parameter { Min = 18, Max = 24, Value = 21 });
    Params.Add(new Parameter { Min = 49, Max = 60, Value = 54 });

    IterateParams(Params.ToArray());
}

我相信这就是所谓的a。我发现你问题的这一部分需要澄清:我的问题是我需要运行一些带有每个参数值的所有可能组合的代码,例如,将参数1的值设置为7、8。。。Eric Lippert在他的博客上有一些文章介绍了这种类型的练习,你可能想看看你可以用Enumerable.RangeMin,Max-Min+将你的范围转换成所有值的集合1@Scott实际上我认为OP想要笛卡尔积,但有点不清楚。我可能错了,但是我认为OP需要所有参数的组合,所以{7,18,49},{8,18,49}。。。{12,18,49},{7,19,49}等等,直到所有三个{12,24,60}中的最大值,这三个值都将从看起来像完成了任务的输出中通过每个值运行-我需要它通过每个值的组合运行。我想某种递归可以做到这一点,谢谢!