Как изменить это так, чтобы он возвращал массивы - PullRequest
0 голосов
/ 26 сентября 2010

Следующий код работает отлично и показывает правильный вывод:

- (void)viewDidLoad {
    [super viewDidLoad];
    [self expand_combinations:@"abcd" arg2:@"" arg3:3];
}

-(void) expand_combinations: (NSString *) remaining_string arg2:(NSString *)s arg3:(int) remain_depth
{
    if(remain_depth==0)
    {
        printf("%s\n",[s UTF8String]);
        return;
    }

    NSString *str = [[NSString alloc] initWithString:s];
    for(int k=0; k < [remaining_string length]; ++k)
    {

        str = [s stringByAppendingString:[[remaining_string substringFromIndex:k] substringToIndex:1]];
        [self expand_combinations:[remaining_string substringFromIndex:k+1] arg2:str arg3:remain_depth - 1];

    }
    return;
}

Однако вместо вывода результатов я хочу вернуть их в NSArray.Как этот код можно изменить, чтобы сделать это?Мне нужно использовать информацию, которую эта функция генерирует в других частях моей программы.

Ответы [ 2 ]

3 голосов
/ 26 сентября 2010

Есть несколько вещей, которые вы должны изменить в своем коде.

  • Первый - рассмотрите возможность изменения названия вашего метода на более понятное и значимое, чем -expand_combinations:arg2:arg3.
  • Секунда - у вас утечка памяти. Вам не нужно устанавливать выделение памяти и инициализировать str строкой s, потому что вы сразу изменяете ее значение в цикле без освобождения старого значения.
  • Третий - взгляните на NSMutableArray. В начале метода создайте массив с [NSMutableArray array], и вместо каждой строки с printf добавьте строку в массив. Затем верните его.
2 голосов
/ 26 сентября 2010

у вас есть:
создать изменяемый массив в viewDidLoad до [self expand_combinations ...
добавить дополнительный параметр (изменяемый массив) в expand_combinations
заполнить массив в expand_combinations

...