Как проверить, содержит ли NSMutableArray объект, который содержит определенный текст? - PullRequest
2 голосов
/ 01 ноября 2011

Как я могу проверить, содержит ли NSMutableArray объект, который содержит определенный текст? Затем, если найден один фрагмент текста, он заменит его другим фрагментом текста.

Спасибо

Ответы [ 3 ]

2 голосов
/ 01 ноября 2011

Что-то вроде этого должно работать:

@interface NSMutableArray (JRAdditions) 

- (void) replaceStringObjectsContainingString:(NSString *) str withString:(NSString *) newString;

@end

@implementation NSMutableArray (JRAdditions)

- (void) replaceStringObjectsContainingString:(NSString *) str withString:(NSString *) newString {

   for(unsigned i = 0; i < [self count]; ++i) {
      id obj = [self objectAtIndex:i];

      if(![obj isKindOfClass:[NSString class]]) continue;

      NSString *replaced = [str stringByReplacingOccurrencesOfString:str withString:newString];
      [self replaceObjectAtIndex:i withObject:replaced];

   }
}

@end

Тогда вы бы использовали его так:

NSMutableArray *array = ...;

[array replaceStringObjectsContainingString:@"blah" withString:@"foo"];
1 голос
/ 01 ноября 2011

Вы можете выполнить проверку внутри цикла for для всех объектов в NSMutableArray, используйте [object rangeOfString: @ "text"] для проверки диапазона.

0 голосов
/ 01 ноября 2011

Вы можете либо выполнить итерацию в вашем массиве, выполнить проверку каждого объекта, а затем заменить, если необходимо.

Или вы можете использовать что-то более необычное с:

- (void)makeObjectsPerformSelector:(SEL)aSelector withObject:(id)anObject

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

- (void) replaceTextWithParameters:(NSArray*)parameters {
    if([self.yourText isEqualToString:[parameters objectAtIndex:0]) {
        self.yourText = [parameters objectAtIndex:1];
    }
}

Тогда вам нужно будет только вызвать:

NSArray *parameterArray = [NSArray arrayWithObjects:@"Text to search", @"replacementText", nil];
[yourArray makeObjectsPerformSelector:@selector(replaceTextWithParameters:) withObject:parameterArray];

Это будет намного быстрее во время выполнения, чем зацикливание на каждом элементе вашего массива (особенно если у вас много элементов)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...