关于c#:查找两个数组之间所有可能的值组合

Finding all possible value combinations between two arrays

我有两个字符串数组,不一定具有相同的长度,我想从数组中找到两个值之间所有可能的"集合"组合,而不是从任何一个数组中重复。
例如,给定数组:
{ "A1", "A2", "A3" }
{ "B1", "B2" }
我想要的结果是以下几组:
{ ("A1", "B1"), ("A2", "B2") }
{ ("A1", "B1"), ("A3", "B2") }
{ ("A1", "B2"), ("A2", "B1") }
{ ("A1", "B2"), ("A3", "B1") }
{ ("A2", "B1"), ("A3", "B2") }
{ ("A2", "B2"), ("A3", "B1") }

我的总体方向是创建递归函数,该函数将两个数组作为参数并一次删除每个"选择"字符串,调用自身直到任一数组为空,但是我有点担心性能问题(我需要在大约 1000 对字符串数组上运行此代码)。
谁能指导我找到一种有效的方法来做到这一点?


将两个数组视为表格的边可能会有所帮助:

1
2
3
4
5
6
        A1      A2      A3
---+-------+-------+-------+
B1 | B1,A1 | B1,A2 | B1,A3 |
---+-------+-------+-------+
B2 | B2,A1 | B2,A2 | B2,A3 |
---+-------+-------+-------+

这意味着一个循环嵌套在另一个循环中,一个循环用于行,另一个循环用于列。这将为您提供初始对组:

1
{B1,A1} {B1,A2} {B1,A3} {B2,A1} {B2,A2} {B2,A3}

然后就是建立初始集合的组合。您可以类似地使用行和列的对集合来可视化组合:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
      B1,A1 B1,A2 B1,A3 B2,A1 B2,A2 B2,A3
-----+-----+-----+-----+-----+-----+-----+
B1,A1|     |  X  |  X  |  X  |  X  |  X  |
-----+-----+-----+-----+-----+-----+-----+
B1,A2|     |     |  X  |  X  |  X  |  X  |
-----+-----+-----+-----+-----+-----+-----+
B1,A3|     |     |     |  X  |  X  |  X  |
-----+-----+-----+-----+-----+-----+-----+
B2,A1|     |     |     |     |  X  |  X  |
-----+-----+-----+-----+-----+-----+-----+
B2,A2|     |     |     |     |     |  X  |
-----+-----+-----+-----+-----+-----+-----+
B2,A3|     |     |     |     |     |     |
-----+-----+-----+-----+-----+-----+-----+

同样,这可以通过一对嵌套循环来完成(提示:你的内循环的范围将由外循环的值决定)。


n


n


n


n


关于本网站上的两个列表的组合有很多问题(和答案)(见边栏)。如果我理解正确,您的用例似乎只是表面上的不同。

有方法就够了

1
2
3
IEnumerable<Tuple<string, string>> Combinations(
  IEnumerable<string> list1,
  IEnumerable<string> list2) {}

(在\\'duplicates\\'中已经以各种形式和大小存在),然后按照以下步骤使用它(作业=您填写详细信息):

遍历列表 1 的所有组合


这不是完全相同的问题,但是我对以下问题做了一个解决方案,这可能是一个不错的起点:

数组组合数组