如何检查NSMutableArray是否包含包含特定文本的对象?

时间:2011-11-01 06:55:40

标签: iphone objective-c ios xcode nsmutablearray

如何检查NSMutableArray是否包含包含特定文本的对象?然后,如果找到了一段文本,它将用另一段文本替换它。

由于

3 个答案:

答案 0 :(得分:2)

这样的事情应该有效:

@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 :(得分:1)

您可以在for循环中对NSMutableArray中的所有对象执行检查,使用 [object rangeOfString:@“text”]用于检查范围。

答案 2 :(得分:-1)

您可以迭代数组,对每个对象进行检查,然后在必要时进行替换。

或者你可以使用更高级的东西:

- (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];

在运行时比在数组的每个元素上循环要快得多(特别是如果你有很多元素)