我希望可以通过“NSPredicate”完成。我有成千上万的字符串数组,我想使用字符串长度拆分成数组。即长度为2的字符串将成为一个数组。长度为3的字符串将以数组形式出现。是否可以使用“NSPredicate”。我检查了NSPredicate Class Reference。但找不到有用的例子。
感谢
尼尔
答案 0 :(得分:0)
我希望以下代码解决您的问题。
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);
答案 1 :(得分:0)
我认为使用正则表达式的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];
}