我有一些Objective-C代码可以帮我完成工作。但它是否丑陋(效率低下)。对于每个循环,它可以更好地执行吗?
请参阅此代码:
for (int i = 0; i < [careerIds count]; i++) {
NSString *titleString = [[titles objectAtIndex:i] stringValue];
if ([titleString isEqualToString:@""] || [titleString rangeOfString:@"Intresseanmälan"].location != NSNotFound) {
// Don't add the id
} else {
[ids addObject:[[careerIds objectAtIndex:i] stringValue]];
}
}
答案 0 :(得分:2)
我认为你所拥有的代码并不特别难看 - 使用索引for循环并没有什么不妥。我唯一可能改变的是反转if
语句的意义,以避免空// Don't add the id
行。这是一种方式:
for (int i = 0; i < [careerIds count]; i++) {
NSString *titleString = [[titles objectAtIndex:i] stringValue];
if (([titleString length] > 0) &&
([titleString rangeOfString:@"Intresseanmälan"].location == NSNotFound))
{
[ids addObject:[[careerIds objectAtIndex:i] stringValue]];
}
}
为了找到问题的核心,不,我不相信可以使用for
循环的快速枚举版本来同时迭代两个单独容器的内容。您可以将它与一个一起使用,但正如我在注释中指出的那样,您必须使用-indexOfObject:
来恢复当前对象的索引,以便您可以使用{{1}从另一个数组中获取相应的项目}}
答案 1 :(得分:0)
使用for-each循环可以更好地执行吗?
是
for (id title in careerIds) {
NSString *titleString = [title stringValue];
if ([titleString isEqualToString:@""] || [titleString rangeOfString:@"Intresseanmälan"].location != NSNotFound) {
// Don't add the id
} else {
[ids addObject:titleString];
}
}
或者如果你想成为真正的闪光灯:
for (NSString* titleString in [careerIds valueForKey: @"stringValue"]) {
if ([titleString isEqualToString:@""] || [titleString rangeOfString:@"Intresseanmälan"].location != NSNotFound) {
// Don't add the id
} else {
[ids addObject:titleString];
}
}
没有。 : - )
答案 2 :(得分:0)
假设careerIds是NSArray或NSMutableArray并且你要向它添加NSString对象,你可以这样做:
for (NSString *titleString in careerIds) {
if ([titleString isEqualToString:@""] || [titleString rangeOfString:@"Intresseanmälan"].location != NSNotFound) {
// Don't add the id
} else {
[ids addObject: titleString];
}
}
[ids addObject:[[careerIds objectAtIndex:i] stringValue]];