获取阵列中的所有组合

nfp*_*lee 10 c#

说我有以下数组:

var arr = new[] { "A", "B", "C" };
Run Code Online (Sandbox Code Playgroud)

如何生成仅包含两个字符且不包含两个字符的所有可能组合(例如,AB将相同BA).例如,使用上面的数组会产生:

AB
AC
BC
Run Code Online (Sandbox Code Playgroud)

请注意,此示例已简化.数组和所需字符串的长度将更大.

如果有人可以提供帮助,我真的很感激.

Arj*_*nbu 8

让我们扩展它,所以也许我们可以看到模式:

string[] arr = new string[] { "A", "B", "C", "D", "E" };

//arr[0] + arr[1] = AB
//arr[0] + arr[2] = AC
//arr[0] + arr[3] = AD
//arr[0] + arr[4] = AE

//arr[1] + arr[2] = BC
//arr[1] + arr[3] = BD
//arr[1] + arr[4] = BE

//arr[2] + arr[3] = CD
//arr[2] + arr[4] = CE

//arr[3] + arr[4] = DE
Run Code Online (Sandbox Code Playgroud)

我在这里看到两个循环.

  • 第一个(外部)循环从0到3(arr.Length - 1)
  • 第二个(内部)循环从外部循环计数器+ 1到4(arr.Length)

现在应该很容易将其转换为代码!


小智 5

这段代码

var strs = new[] {"A", "B", "C", "D"};
var combinations = CreateCombinations(0, "", strs);
var text = string.Join(", ", combinations);

private List<string> CreateCombinations(int startIndex, string pair, string[] initialArray)
    {
        var combinations = new List<string>();
        for (int i = startIndex; i < initialArray.Length; i++)
        {
            var value = $"{pair}{initialArray[i]}";
            combinations.Add(value);
            combinations.AddRange(CreateCombinations(i + 1, value, initialArray));
        }

        return combinations;
    }
Run Code Online (Sandbox Code Playgroud)

文本变量将包含

A, AB, ABC, ABCD, ABD, AC, ACD, AD, B, BC, BCD, BD, C, CD, D
Run Code Online (Sandbox Code Playgroud)