Эффективно создавайте шаблон заполнителя NSString с NSArray значений

Я пытаюсь создать служебный метод для FMDB, который будет принимать NSArray значений и возвращать строку заполнителей для использования в операторе IN на основе количества значений в массиве.

Я не могу придумать элегантный способ создания этой строки, мне не хватает какого-то служебного метода NSString:

// The contents of the input aren't important.
NSArray *input = @[@(55), @(33), @(12)];    

// Seems clumsy way to do things:
NSInteger size = [input count];
NSMutableArray *placeholderArray = [[NSMutableArray alloc] initWithCapacity:size];
for (NSInteger i = 0; i < size; i++) {
    [placeholderArray addObject:@"?"];
}

NSString *output = [placeholderArray componentsJoinedByString:@","];
// Would return @"?,?,?" to be used with input

person Dan Poltawski    schedule 15.10.2013    source источник
comment
Возможно, вы могли бы добавить это как категорию в NSArray   -  person Alladinian    schedule 15.10.2013


Ответы (1)


Что насчет этого?

NSArray *input = @[@(55), @(33), @(12)];

NSUInteger count = [input count];
NSString *output = [@"" stringByPaddingToLength:(2*count-1) withString:@"?," startingAtIndex:0];
// Result: ?,?,?

stringByPaddingToLength заполняет данную строку (в данном случае пустую строку) до заданной длины, добавляя символы из шаблона @"?,".

person Martin R    schedule 15.10.2013
comment
+1 Умный и быстрый (хотя ему нужна защита от пустого массива) - person Alladinian; 15.10.2013
comment
Согласованный! Я просто хотел бы отметить, что мы находимся за пределами зоны комфорта componentsJoinedByString: (как и следовало ожидать) :-) - person Alladinian; 15.10.2013