如何检查一个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];
这将是很多在运行时的速度比你的循环数组(尤其是如果你有很多的元素)中的每个元素
答
您可以循环在NSMutableArray中的所有对象进行内部检查,使用 。
你能举一个例子 - 我不知道你在做什么... – pixelbitlabs
我编辑了我的答案样本给你的想法(未经测试) – vdaubry
@vdaubry'makeObjectsPerformSelector' *确实*执行循环。没有区别。 –