重复任意嵌套for循环

时间:2014-04-27 22:53:42

标签: objective-c arrays for-loop

我已经尝试了几个小时来制定出能够达到以下条件的算法:

  • 取一个任意数字,n个数组(每个数组都填充字符串),其中每个数组都是一个比喻性的父母'到后续数组
  • 对于数组中的每个对象(字符串),将该字符串与后续数组组合在一起。字符串
  • 将组合添加到(仅一个)数组
  • 重复所有每个对象的线性组合

我认为最好用一个例子来解释:

e.g。对于三个阵列 NSArray *input = @[[@"cat",@"dog",@"mouse"],[@"apple",@"banana"],[@"green"]]

产生类似这样的输出: @[ @"catapplegreen", @"catbananagreen", @"dogapplegreen", @"dogbananagreen", @"mouseapplegreen", @"mousebananagreen" ];

我已尝试嵌套for循环,但无法想出允许存在任意数量的循环的方法,因为需要有一个循环或“&”级别& #39;输入中的每个数组。

如果有人有任何建议(甚至只是指出要解决这个问题的指示),我将非常感激。

1 个答案:

答案 0 :(得分:2)

基本上我认为你想要做的是深度优先遍历你的数据。

您可以使用

等功能
- (void)DepthFirstOnString:(NSString *)string children:(NSArray *)children {
    if (children.count < 1) {
        // You're finished
        NSLog(@"%@", string);
        return;
    } else {
        // Keep going
        NSArray *next = children[0];
        NSMutableArray *remaining = [children mutableCopy];
        [remaining removeObject:next];

        [next enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
            NSMutableString *currentString = [string mutableCopy];
            [currentString appendString:obj];

            [self DepthFirstOnString:currentString children:remaining];
        }];
    }
}

被此代码调用:

NSArray *input =  @[@[@"cat",@"dog",@"mouse"], @[@"apple",@"banana"], @[@"green"]];

NSArray *first = input[0];
NSMutableArray *remaining = [input mutableCopy];
[remaining removeObject:first];

[first enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
    [self DepthFirstOnString:obj children:remaining];
}];

不是最新的代码,但希望能让您知道在哪里拍摄。