一 问题描述
查找数组中是否包含指定
二 问题解决
方法一
NSArray *array =@[@"abc123", @"cde234" , @"fgh456", @"ijk567", @"KLm567", @"MnO890", @"opq012", @"Rst123"];
//匹配字符串,反回结果, SELF==表示数组中每一个元素
NSString *match1 = @"MnO890";
NSPredicate *predicate1 = [NSPredicate predicateWithFormat:@"SELF == %@", match1];
NSArray *results1 = [array filteredArrayUsingPredicate:predicate1];
方法二
[array enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
if ([obj isEqualToString:@"opq012"]) {
NSLog(@"%@-索引%d",obj, (int)idx);
}
}];
三 拓展延伸
如何使用谓词NSPredicate实现快速寻找。
先看下定义
NSPredicate *ca = [NSPredicate predicateWithFormat:(NSString *), ...];
说明:
Format:有如下几种规则
(1)比较运算符>,<,==,>=,<=,!=
可用于数值及字符串
例:@"number > 100"
(2)范围运算符:IN、BETWEEN
例:@"number BETWEEN {1,5}"
@"address IN {'shanghai','beijing'}"
(3)字符串本身:SELF
例:@“SELF == ‘APPLE’"
(4)字符串相关:BEGINSWITH、ENDSWITH、CONTAINS
例:@"name CONTAIN[cd] 'ang'" //包含某个字符串
@"name BEGINSWITH[c] 'sh'" //以某个字符串开头
@"name ENDSWITH[d] 'ang'" //以某个字符串结束
注:[c]不区分大小写[d]不区分发音符号即没有重音符号[cd]既不区分大小写,也不区分发音符号。
(5)通配符:LIKE
例:@"name LIKE[cd] '*er*'" //*代表通配符,Like也接受[cd].
@"name LIKE[cd] '???er*'"
(6)正则表达式:MATCHES
例:NSString *regex = @"^A.+e$"; //以A开头,e结尾
@"name MATCHES %@",regex"
具体使用方法如下
1.NSString对象
NSArray *array =@[@"abc123", @"cde234" , @"fgh456", @"ijk567", @"KLm567", @"MnO890", @"opq012", @"Rst123"];
//匹配字符串,反回结果, SELF==表示数组中每一个元素
NSString *match1 = @"MnO890";
NSPredicate *predicate1 = [NSPredicate predicateWithFormat:@"SELF == %@", match1];
NSArray *results1 = [array filteredArrayUsingPredicate:predicate1];
//近似匹配字符串,类似SQL中的语法
NSString *match2 = @"fgh45";
NSPredicate *predicate2 = [NSPredicate predicateWithFormat:@"SELF contains %@", match2];
NSArray *results2 = [array filteredArrayUsingPredicate:predicate2];
//不区分大小写匹配
NSString *match3 = @"klm567";
NSPredicate *predicate3 = [NSPredicate predicateWithFormat:@"SELF like[cd] %@", match3];
NSArray *results3 = [array filteredArrayUsingPredicate:predicate3];
//正则匹配
NSString *match4 = @"[a-zA-Z0-9]{6}";
NSPredicate *predicate4 = [NSPredicate predicateWithFormat:@"SELF matches %@", match4];
NSArray *results4 = [array filteredArrayUsingPredicate:predicate4];
NSLog(@"%@\n%@\n%@\n%@\n",results1,results2,results3,results4);
输出结果
(
MnO890
)
(
fgh456
)
(
KLm567
)
(
abc123,
cde234,
fgh456,
ijk567,
KLm567,
MnO890,
opq012,
Rst123
)
2.含有属性的对象
@interface Person: NSObject
{
NSString *_name;
NSString *_telephone;
NSInteger _id;
}
@property (nonatomic, copy) NSString *name;
@property (nonatomic, copy) NSString *telephone;
@property (nonatomic, assign) NSInteger id;
@end
1).等于查询
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name == %@", "张三"];
NSArray *filteredArray = [array filteredArrayUsingPredicate:predicate];
2).模糊查询
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name CONTAINS %@", @"A"]; //predicate只能是对象
NSArray *filteredArray = [array filteredArrayUsingPredicate:predicate];