Я ищу написать метод, который принимает произвольное количество объектов 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. Кроме того, я бы хотел, чтобы результаты были одинаковой длины. То есть, если было три исходных массива, каждый из вложенных массивов, возвращаемых методом, должен иметь длину три.
Есть какие-нибудь идеи о самом элегантном способе сделать это?