小编典典

查找两个数组之间的所有可能值组合

algorithm

我有两个字符串数组,长度不一定相同,我想从数组中找到两个值之间组合的所有可能的“集合”,而没有一个数组重复。
例如,给定数组:
{“ 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”,“

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


阅读 841

收藏
2020-07-28

共1个答案

小编典典

将这两个数组视为表的一面可能会有所帮助:

        A1      A2      A3
---+-------+-------+-------+
B1 | B1,A1 | B1,A2 | B1,A3 |
---+-------+-------+-------+
B2 | B2,A1 | B2,A2 | B2,A3 |
---+-------+-------+-------+

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

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

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

      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|     |     |     |     |     |     |
-----+-----+-----+-----+-----+-----+-----+

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

2020-07-28