Как разбить массив строк на основе длины строки? - PullRequest
3 голосов
/ 27 сентября 2011

Надеюсь, это можно сделать с помощью «NSPredicate».У меня есть массив строк в тысячах, и я хочу разделить на массив, используя длину строки.т.е. строки с длиной 2 войдут в массив.Строки с длиной 3 придут в массиве и так далее.Возможно ли это с помощью «NSPredicate».Я проверил Ссылку класса NSPredicate.Но не смог найти полезного примера.

Спасибо
Нил

Ответы [ 2 ]

0 голосов
/ 27 сентября 2011

Я считаю, что NSP-предикат с регулярным выражением может быть неэффективным. Этот код должен решить ее наверняка и более эффективно, вы получите словарь, где ключи - это длины строк, а объекты - соответствующие массивы, содержащие строки определенной длины.

NSMutableDictionary* filtered = [NSMutableDictionary dictionary];
NSMutableArray* strings =[NSMutableArray array];
[strings addObject:@"ABC"];
[strings addObject:@"AGADF"];
[strings addObject:@"ADFADS"];
[strings addObject:@"DD"];
[strings addObject:@"DFA"];


for (NSString* s in strings) {
    NSNumber* key = [NSNumber numberWithInt:[s length]];
    NSMutableArray* arr = [filtered objectForKey:key];
    if (nil==arr) {
        arr = [NSMutableArray array];
        [filtered setObject:arr forKey:key];
    } 
    [arr addObject:s];
}
0 голосов
/ 27 сентября 2011

Надеюсь, следующий код решит вашу проблему.

 NSString *regExp = @"[A-Z0-9a-z]{2,3}";
 NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regExp];

    NSMutableArray *array=[NSMutableArray new];
    [array addObject:@"ABC"];
    [array addObject:@"AGADF"];
    [array addObject:@"ADFADS"];
    [array addObject:@"DD"];
    [array addObject:@"DFA"];

    NSArray *filtered = [array filteredArrayUsingPredicate:predicate];

    NSLog(@"filter : %@",filtered);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...