这更像是一个好奇的问题,而不是一个紧迫的问题。这个问题正在寻找一种更好的方法来执行以下操作,这意味着不使用两个for
循环。
我有NSArray *array
个NSString
和方法-(BOOL)isGoodString:(NSString *)string
。我想在一个随机的位置跳入数组并找到第一个好的字符串,必要时包裹在最后。但是,可能没有好的字符串,所以我也需要知道。这是当前的实现:
-(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 @"";
}
有什么建议吗?效率会很好,但是因为这真的更多是为了好奇,所以在有限时间内工作的任何东西都会很好听。
答案 0 :(得分:3)
使用模数消除您的第二个搜索循环:
-(NSString *)randomGoodString {
int N = [array count]
int start = arc4random() % N;
for (int j=0; j<N ; ++j) {
index = (j+start)%N;
if isGoodString([array objectAtIndex:index]) {
return [array objectAtIndex:index];
}
}
return @"";
}