Как изменить этот цикл в Fast Enumeration

Я хочу выполнить цикл For быстрее, но понятия не имею о Fast Enumeration. Может ли кто-нибудь предложить мне, как изменить этот цикл For в fast enumeration.

NSString *strCorrectWord;
    for(i=0;i<[self.strCorrectWord length];i++)
    {


    }

person user2497862    schedule 04.07.2013    source источник


Ответы (3)


--> Быстрое перечисление выполняется по коллекции в объекте c, например, если есть NSArray строк, то для каждой строки мы реализуем быстрое перечисление цикла For следующим образом:

for(NSString *str in NSArray object)
{
    statement;
}
person Ravi Sharma    schedule 04.07.2013

NSString не реализует NSFastEnumeration , что означает, что на самом деле не существует альтернативного синтаксиса для ускорения цикла (за исключением упомянутых здесь, возможно).

Узким местом в производительности, скорее всего, будет код, который вы выполняете внутри каждой итерации цикла, а не механика самого цикла, но вы не включили это в вопрос.

Быстрое перечисление — это просто замена более медленным методам, которые раньше использовались для перечисления по коллекциям.

person jrturton    schedule 04.07.2013

Если вы хотите перебрать каждый символ данной строки

NSString *strCorrectWord = @"Test";

NSRange range = NSMakeRange(0, strCorrectWord.length);

[strCorrectWord enumerateSubstringsInRange:range options:NSStringEnumerationByComposedCharacterSequences usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) {

    //Substring is each char
    NSLog(@"%@", substring);
}];

перечисление с блоком в большинстве случаев является более быстрым решением. Используя параметры, вы можете изменить его, чтобы дать вам подстроку для каждого символа или каждого слова.

person Ste Prescott    schedule 04.07.2013
comment
@ user2497862 Примите ответ, если они помогли. - person Ste Prescott; 12.03.2014