Как искать в массиве циклически? - PullRequest
2 голосов
/ 25 мая 2011

Это скорее вопрос любопытства, чем насущный. Этот вопрос ищет лучший способ сделать следующее, то есть без использования двух 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 @"";
}

Есть предложения? Эффективность была бы хорошей, но так как это действительно больше для любопытства, все, что работает в ограниченное время, было бы приятно услышать.

1 Ответ

3 голосов
/ 25 мая 2011

Исключите ваш второй цикл поиска, используя модуль:

-(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 @"";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...