如何检查一个NSMutableArray是否包含一个包含某些文本的对象?

问题描述:

如何检查NSMutableArray是否包含含有特定文本的对象?然后,如果有一个已经找到的文本,它将用另一个文本替换它。如何检查一个NSMutableArray是否包含一个包含某些文本的对象?

感谢

像这样的东西应该工作:

@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 

你会再使用它作为这样的:对于检查范围:@“文本”对象rangeOfString]

NSMutableArray *array = ...; 

[array replaceStringObjectsContainingString:@"blah" withString:@"foo"]; 

您可以阵列上重复,做每个对象的检查,然后在必要时更换。

或者你可以使用一些与票友:

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

这将是很多在运行时的速度比你的循环数组(尤其是如果你有很多的元素)中的每个元素

+0

你能举一个例子 - 我不知道你在做什么... – pixelbitlabs

+0

我编辑了我的答案样本给你的想法(未经测试) – vdaubry

+0

@vdaubry'makeObjectsPerformSelector' *确实*执行循环。没有区别。 –

您可以循环在NSMutableArray中的所有对象进行内部检查,使用 。