形成多维笛卡尔积数组

问题描述

我有一个函数可以为我生成笛卡尔积

        var abcArray = new string[] { "a","b","c" };
        var xyzArray = new string[] { "1","2","3" };

        var combos = CartesianProductSmart(abcArray,xyzArray);
    private static string[][] CartesianProductSmart(string[] arr1,string[] arr2)
    {
        return arr1.SelectMany(s1 => arr2,(s1,s2) => new string[] { s1,s2 })
            .ToArray();
    }

我的输出看起来像:

a,1
a,2
a,3
b,1
b,2
b,3
c,1
c,2
c,3

我怎样才能把这个函数转换成更复杂的东西,比如形成多维数组:

array3 = [ {"A1","B2","C3"},{"A1","B3","C2"},{"A2","B1","C1"},{"A3","C2"}
          ]

我想要的是笛卡尔积,只使用两个数组的每个元素并将其组成一个数组。 (我知道数组大小会因输入而异)。 到目前为止,我的想法是做笛卡尔积,将第一个元素分配为第一个笛卡尔积结果,然后迭代其余的笛卡尔积,并通过检查是否没有重复项添加到新数组中,然后仅选择唯一成员,但这似乎非常低效。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)