2015-06-04 2 views
0

У меня возник вопрос о стиле решения для довольно простой проблемы.Соответствие строки нескольким шаблонам

У меня есть программа, которая соответствует списку имен файлов по нескольким шаблонам. Если имя файла соответствует шаблону, файл переименовывается, а счетчик увеличивается.

В настоящее время я соответствие с 4-х различных моделей, как этот

if ([file rangeOfString:pattern].location != NSNotFound) { 
counter ++; 
//rename file... 
} 

if ([file rangeOfString:pattern2].location != NSNotFound) { 
counter2 ++; 
//rename file... 
} 
[...] 

решение работает хорошо, но не масштабируется. Если мне придется сопоставлять значительно больше шаблонов.

Так я думал об использовании нечто вроде

NSString *someRegexp = ...; 
NSPredicate *myTest = [NSPredicate predicateWithFormat:file, someRegexp]; 

if ([myTest evaluateWithObject: testString]){ 

} 

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

Так Мне было интересно, здесь кто-нибудь знает, является ли более полный/красивое решение для этой проблемы .....

заранее спасибо Norbert

+0

Как насчет размещения шаблонов в массиве и прокрутки файлов через них? –

+0

Это было одно из моих рассмотренных решений. Тем не менее, мне также пришлось бы поместить счетчики в массив. Это закончилось бы массивом структур/объектов ..... Моя первоначальная мысль об этом решении была слишком сложной :-( В частности, начальная сложность довольно высокая, так что для моих 4 шаблонов скорее всего даже будет больше кода ... – Norbert

+0

Вы хотите, чтобы у вас был уникальный счетчик для каждого шаблона? –

ответ

1

Как насчет подклассификации NSString, добавляя счетчик для отслеживания match count.

@interface PatternMatchingString : NSString 

@property (readwrite) NSUInteger matchCount; 

@end 

-(void)patternMatching 
{ 
    for(PatternMatchingString *pattern in arrayOfPatterns) 
    { 
     if([file rangeOfString:pattern].location != NSNotFound) 
      pattern.matchCount++; 
    } 
} 
Смежные вопросы