This is more a curiosity question than a pressing one. This question is looking for a better way to do the following, meaning without using two for loops.
I have an NSArray *array of NSStrings and a method -(BOOL)isGoodString:(NSString *)string. I want to jump into the array at a random spot and find the first good string, wrapping around the end if necessary. However, it may be that there is no good string, so I need to know that as well. Here’s the current implementation:
-(NSString *)randomGoodString {
int N = [array count]
int start = arc4random() % N;
for (int j=start; j<N ; ++j) {
if isGoodString([array objectAtIndex:j]) {
return [array objectAtIndex:j];
}
}
for (j=0; j<start ; ++j) {
if isGoodString([array objectAtIndex:j]) {
return [array objectAtIndex:j];
}
}
return @"";
}
Any suggestions? Efficiency would be nice, but since this really is more for curiosity, anything that works in finite time would be nice to hear about.
Eliminate your second search loop by using a modulus: