从嵌套的NSArray中获取对象创建完全二分图

3
我希望编写一个函数,它可以接受任意数量的NSArray对象,并返回该数组成员所有可能完整组合的嵌套数组。
正如在回答这个问题时告诉我的那样,我需要创建一个二分图或更精确地说,一个完全二分图
例如,如果我有两个数组:
NSArray *a1 = [NSArray arrayWithObjects:@"Blue", @"Green", @"Yellow", nil];
NSArray *a2 = [NSArray arrayWithObjects:@"Apple", @"Orange", @"Pear", nil];

我希望有一个函数,可以接收一个包含多个数组的数组作为参数:
NSArray *nestedArray = [NSArray arrayWithObjects:a1, a2, nil];

并返回相同长度的所有可能组合的数组。因此,在这个例子中,我想要一个类似于以下内容的数组:

 [
      [@"Blue", @"Apple"],
      [@"Blue", @"Orange"],
      [@"Blue", @"Pear"],
      [@"Green", @"Apple"],
      [@"Green", @"Orange"],
      [@"Green", @"Pear"],
      [@"Yellow", @"Apple"],
      [@"Yellow", @"Orange"],
      [@"Yellow", @"Pear"]
]

随着这些数组中对象的数量增加,结果数量也会呈指数级增长。我可能会将此方法作为NSArray的类别。另外,我希望结果都具有相同的长度。也就是说,如果有三个源数组,则该方法返回的每个嵌套数组的长度应为三。
你有什么优雅的方法来实现这个?

1
你想要的不是组合,也不是排列,它们的数量并不会随着数组大小呈指数级增长,而是随着数组数量的增加而增长。 - Fred Foo
@larsmans,我明白你的意思——新标题更清晰了吗? - Chris Ladd
2个回答

1
你说的“所有组合”是什么意思?如果你想要所有的组合,为什么需要两个列表?如果你想要一个二分图,那么你需要修正你的问题。

没问题...如果没有人提出解决方案,我会在找到解决方案后发布它。 - Chris Ladd
请停止乞求点赞。如果你的回答值得点赞,自然会得到它们。请求点赞只是噪音,看起来很糟糕。 - Ken White
@Ken:你能解释一下为什么看起来很糟糕吗?你不是习惯了乞讨吗?在我来自的地方,我经常乞讨!!! - Micromega

0

递归解决方案可能是一个不错的选择。该函数只会找到前两个数组的排列,然后一旦组合成单个数组,您将使用新组合的数组而不是原始数组再次调用此函数。

最终,您只会剩下1个数组,那就是最终结果数组。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接