如何检查NSMutableArray是否包含包含特定文本的对象?然后,如果找到了一段文本,它将用另一段文本替换它。
由于
答案 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];
在运行时比在数组的每个元素上循环要快得多(特别是如果你有很多元素)