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 的所有组合
这不是完全相同的问题,但是我对以下问题做了一个解决方案,这可能是一个不错的起点:
数组组合数组