преобразовать NSArray из NSString (s) в NSArray из NSMutableString (s) - PullRequest
0 голосов
/ 17 ноября 2011

Как это сделать без необходимости "прокручивать" весь данный массив с помощью цикла "for"?

Ответы [ 3 ]

4 голосов
/ 17 ноября 2011

Лучшее, что я могу придумать:

NSMutableArray *replacementArray = [NSMutableArray array];

[originalArray enumerateObjectsUsingBlock:
     ^(id obj, NSUInteger index, BOOL *stop)
     {
          [replacementArray addObject:[[obj mutableCopy] autorelease]];
     }
];

Который более или менее просто говорит originalArray построить цикл for для вас. И если что-нибудь, это больше работы, чем:

NSMutableArray *replacementArray = [NSMutableArray array];

for(id obj in originalArray)
   [replacementArray addObject:[[obj mutableCopy] autorelease]];
3 голосов
/ 19 ноября 2011

Поскольку никто не согласен с моим комментарием, что это дубликат Лучший способ преобразовать NSArray из NSNumbers в массив NSStrings , вот тот же ответ снова:

NSArray * arrayOfMutableStrings = [arrayOfStrings valueForKey:@"mutableCopy"];

Из документов :

valueForKey:
Возвращает массив, содержащий результаты вызова valueForKey: с использованием key для каждого из объектов массива.

- (id)valueForKey:(NSString *)key

Параметры
key Ключ для извлечения.

Возвращаемое значение
Значение найденного ключа.

Обсуждение
Возвращенный массив содержит NSNull элементов для каждого объекта, который возвращает nil.

1 голос
/ 05 января 2012

Я написал метод словаря для NSArray, чтобы иметь возможность писать более чистый функциональный код

-(NSArray *)arrayByPerformingBlock:(id (^)(id))performBlock 
{
    NSMutableArray *array = [NSMutableArray array];
    for (id element in self)
         [array addObject:performBlock(element)];
    return [NSArray arrayWithArray:array];
}

использование:

arrayWithStrings = [arrayWithStrings arrayByPerformingBlock:^id(id element) {return [[element mutableCopy] autorelease];}];

Это было вдохновлено списками, которые я знаю по Python. Я также написал версии этого метода с тестированием. Смотрите мои arraytools .

...