Я считаю, что 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];
}