如何周期性地搜索阵列?

时间:2011-05-24 21:41:42

标签: objective-c arrays search

这更像是一个好奇的问题,而不是一个紧迫的问题。这个问题正在寻找一种更好的方法来执行以下操作,这意味着不使用两个for循环。

我有NSArray *arrayNSString和方法-(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 @"";
}

有什么建议吗?效率会很好,但是因为这真的更多是为了好奇,所以在有限时间内工作的任何东西都会很好听。

1 个答案:

答案 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 @"";
}