关于递归方法的编程结构的问题

时间:2010-07-03 08:36:39

标签: objective-c recursion

我有这种方法,它有点大,所以我不能在这篇文章中包含它。它将数组作为参数并测试其对象(NSStrings)。有时 - 但不总是 - ,该方法使用包含其中一个字符串的数组调用自身。如果每个测试都通过,那么NSString将被发送到另一个处理它的方法。这一切都很好,但现在我正在采用不同的方法。我想调用该方法,让它返回一个成功通过测试的所有NSStrings的数组。但由于该方法自称,我真的不知道如何做到这一点。我可以将所有成功测试的NSStrings添加到一个数组中,而不是处理它,但是那个数组需要在所有方法中都可以访问。这里推荐什么?我想避免公开变量..

- (void)doStuff: (NSArray *)array { //A quick (very short) example of what I have now.
    for (NSString *string in array) {
        if ([string isEqualToString: @"test"])
            [self doStuff: [NSArray arrayWithObject: @"test2"]];
        else
            [self processStuff: string];
    }
}

1 个答案:

答案 0 :(得分:2)

您可以添加一个可变数组作为其参数之一,并在其中添加结果:

- (void)doRecursiveWithData:(NSArray *)array storeResultsIn:(NSMutableArray *)results { 
    if ( shoudGoDeeper ) 
       [self doRecursiveWithData:(your new array)];
    else 
       [results addObject:(whatever you want to store)]; // or use another method to so so
}

我知道你的例子只是一个例子,但也许值得思考如何在没有递归的情况下离开 - 在许多方面,这很容易实现并且通常表现得更好。