如何获得许多阵列的所有组合?

时间:2016-09-08 15:30:24

标签: c# c arrays

编辑: 我有建筑物,里面有窗户,墙壁,门等等。我想通过从门上取一扇门,从窗户看窗户等来组合它们。组合应包括所有可能性。我将问题呈现为数组集,每个数组都有一组元素。现在我想把这些元素组合在一起,条件是每个组合必须包含每个数组的最多一个元素(数组的数量是无限的,可以是任何数字)。为了澄清问题,我举一个例子:

示例数组:

array1={1,2,3}
array2={a,b,c}
array3={#,$,%}

输出:

1
1,a
1,a,#
1,a,$
1,a,%
1,b
1,b,#
1,b,$
1,b,%
1,c
1,c,#
1,c,$
1,c,%
(for 2 and 3 the same)
a
a,#
a,$
a,%
b
b,#
b,$
b,%
(for c the same)
#
$
%

这意味着在每个组合中每个阵列最多只有一个元素。

1 个答案:

答案 0 :(得分:1)

        var array1 = new[] {1, 2, 3};
        var array2 = new[] { "a", "b", "c"};
        var array3 = new[] { "#", "$", "%"};
        // ----------------------------------

自己动手......

        var l1 = array1.Select(i=>i.ToString()).ToList();
        var l2 = array2.ToList();
        var l3 = array3.ToList();
        l1.Add("");
        l2.Add("");
        l3.Add("");
        // ----------------------------------
        foreach (var a in l1)
            foreach (var b in l2)
               foreach (var c in l3)
         Console.WriteLine($"{a}{b}{c}");

或使用LINQ

        var result =
            from x in l1
            from y in l2
            from z in l3
            select new[] { x, y, z };
        foreach (var r in result)
            Console.WriteLine($"{r[0]}{r[1]}{r[2]}");