【问题标题】:How to search an array cyclically?如何循环搜索数组?
【发布时间】:2011-05-24 21:41:42
【问题描述】:

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

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

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

【问题讨论】:

    标签: objective-c arrays search


    【解决方案1】:

    使用模数消除第二个搜索循环:

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

    【讨论】:

      猜你喜欢
      • 2013-08-28
      • 2018-04-07
      • 2011-12-03
      • 1970-01-01
      • 2012-01-25
      • 1970-01-01
      • 1970-01-01
      • 2013-12-05
      • 1970-01-01
      相关资源
      最近更新 更多