相关疑难解决方法(0)

更快替代嵌套循环?

我需要创建一个数字组合列表.数字很​​小所以我可以使用byte而不是int.但是,它需要许多嵌套循环才能获得所有可能的组合.我想知道是否有更有效的方式来做我想要的事情.到目前为止的代码是:

var data = new List<byte[]>();
for (byte a = 0; a < 2; a++)
for (byte b = 0; b < 3; b++)
for (byte c = 0; c < 4; c++)
for (byte d = 0; d < 3; d++)
for (byte e = 0; e < 4; e++)
for (byte f = 0; f < 3; f++)
for (byte g = 0; g < 3; g++)
for (byte h = 0; h < …
Run Code Online (Sandbox Code Playgroud)

c# combinations

85
推荐指数
7
解决办法
1万
查看次数

生成集合的排列(最有效)

我想生成一个集合(集合)的所有排列,如下所示:

Collection: 1, 2, 3
Permutations: {1, 2, 3}
              {1, 3, 2}
              {2, 1, 3}
              {2, 3, 1}
              {3, 1, 2}
              {3, 2, 1}
Run Code Online (Sandbox Code Playgroud)

一般而言,这不是"如何"的问题,而是关于如何最有效的问题.此外,我不想生成所有排列并返回它们,但一次只生成一个排列,并且只在必要时继续(很像迭代器 - 我也尝试过,但结果却少了有效).

我已经测试了很多算法和方法,并提出了这个代码,这是我尝试过的最有效的代码:

public static bool NextPermutation<T>(T[] elements) where T : IComparable<T>
{
    // More efficient to have a variable instead of accessing a property
    var count = elements.Length;

    // Indicates whether this is the last lexicographic permutation
    var done = true;

    // Go through the array from last to first
    for (var i = …
Run Code Online (Sandbox Code Playgroud)

c# algorithm optimization performance permutation

59
推荐指数
5
解决办法
5万
查看次数

Linq的组合发电机

是否有可能创建一些Linq,生成一个包含一系列数字的所有可能组合的List?

如果输入"21",它将生成一个包含以下元素的列表:

list[0] = "21"
list[1] = "22"
list[2] = "11"
list[3] = "12"
Run Code Online (Sandbox Code Playgroud)

(不按顺序)

我知道你可以使用范围来做以下事情:

List<char> letterRange = Enumerable.Range('a', 'z' - 'a' + 1).Select(i => (Char)i).ToList(); //97 - 122 + 1 = 26 letters/iterations
Run Code Online (Sandbox Code Playgroud)

从az生成字母表.但我似乎无法转移这些知识来制作组合发生器

我已经能够用以下代码弄清楚它,但它似乎太笨重了,我相信它可以用几行完成.它确实感觉我做的是一个糟糕的解决方案.

想象一下,GetAllCombinations("4321")如果有帮助,我已经打过电话

public static String[] GetAllCombinations(String s)
{
    var combinations = new string[PossibleCombinations(s.Length)];

    int n = PossibleCombinations(s.Length - 1);

    for (int i = 0; i < s.Length; i++)
    {
        String sub;
        String[] subs;

        if (i == 0)
        {
            sub = s.Substring(1); //Get …
Run Code Online (Sandbox Code Playgroud)

c# linq combinations

19
推荐指数
3
解决办法
2万
查看次数

如何使用LINQ从一组数字中查找n个项目的所有组合?

我正在尝试编写一种算法来从一组数字中选择n个值的所有组合.

例如,给定集合: 1, 2, 3, 7, 8, 9

该组中2个值的所有组合为:

(1,2),(1,3),(1,7),(1,8),(1,9),(2,3),(2,7),(2,8),(2) ,9),(3,7),(3,8),(3,9),(7,8),(7,9),(8,9)

3是:

(1,2,3),(1,2,7),(1,2,8),(1,2,9),(1,3,7),(1,3,8),(1) ,3,9),(1,7,8),(1,7,9),(1,8,9),(2,3,7),(2,3,8),(2,3) ,9),(2,7,8),(2,7,9),(2,8,9),(3,7,8),(3,7,9),(3,8,9) ),(7,8,9)

等等!

我目前正在使用方法来产生2,3和4值组合的返回集,但在我看来,这可以在LINQ查询中推广.

谢谢你的帮助!

c# linq algorithm logic set

8
推荐指数
2
解决办法
5295
查看次数

获得所有参数组合

我有一个带有可能值的参数列表:

// Definition of a parameter
public class prmMatrix
{
    public string Name { get; set; }
    public List<string> PossibleValues { get; set; }

    public prmMatrix(string name, List<string> values)
    {
        Name = name;
        PossibleValues = values;
    }
}

//[...]

// List of params       
List<prmMatrix> lstParams = new List<prmMatrix>();

lstParams.Add(new prmMatrix("Option A", new List<string>() { "Yes", "No" }));
lstParams.Add(new prmMatrix("Option B", new List<string>() { "Positive", "Negative" }));
Run Code Online (Sandbox Code Playgroud)

我希望所有参数组合都可能,例如:

[Option A:Yes][Option B:Positive]
[Option A:Yes][Option B:Negative]
[Option A:No][Option B:Positive]
[Option A:No][Option B:Negative]
Run Code Online (Sandbox Code Playgroud)

C#中最好的方法是什么?

c# combinations permutation

4
推荐指数
1
解决办法
1275
查看次数