我希望可以使用“NSPredicate”完成。我有一个包含成千上万个字符串的数组,我想通过字符串长度将它们分割成数组。例如,长度为2的字符串将进入一个数组中,长度为3的字符串将进入另一个数组中,以此类推。是否可以使用“NSPredicate”实现?我查看了NSPredicate类参考文档,但没有找到有用的示例。
谢谢 Neal
谢谢 Neal
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);
我认为使用正则表达式的NSPredicate可能不够高效。这段代码肯定可以更有效地解决问题,你将获得一个字典,其中键是字符串长度,而对象是包含特定长度字符串的相应数组。
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];
}