我正在使用一个NSDictionary本身包含字典的一些键及其值。格式如下,
{
"1" = {
"key1" = "ss",
"key2" = "rr",
"name" = "nm"
},
"2" = {
"key1" = "tt",
"key2" = "vv",
"name" = "gf"
},
"3" = {
"key1" = "nm",
"key2" = "vv",
"name" = "gf"
},
"4" = {
"key1" = "tt",
"key2" = "vv",
"name" = "gf"
},
}
我需要过滤key1应为“tt”的情况,key2应使用NSPredicate“vv”。
答案 0 :(得分:25)
假设
mainDict = {
"1" = {
"key1" = "ss",
"key2" = "rr",
"name" = "nm"
},
"2" = {
"key1" = "tt",
"key2" = "vv",
"name" = "gf"
},
"3" = {
"key1" = "nm",
"key2" = "vv",
"name" = "gf"
},
"4" = {
"key1" = "tt",
"key2" = "vv",
"name" = "gf"
},
}
现在您可以通过以下方式进行过滤:
NSArray *resultArray = [[mainDict allValues] filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"(key1 == %@) AND (key2==%@)", @"tt",@"vv"]];
试试这个来检查:
NSMutableDictionary *mainDict=[[NSMutableDictionary alloc] init];
for(int i=1; i<=3; i++)
{
[mainDict setObject:[NSDictionary dictionaryWithObjectsAndKeys:@"tt",@"key1",@"vv",@"key2",@"ttqwdwd",@"name", nil] forKey:[NSString stringWithFormat:@"%i",i]];
}
[mainDict setObject:[NSDictionary dictionaryWithObjectsAndKeys:@"tt",@"key1",@"kk",@"key2",@"ttwwdwd",@"name", nil] forKey:[NSString stringWithFormat:@"%i",4]];
[mainDict setObject:[NSDictionary dictionaryWithObjectsAndKeys:@"tt",@"key1",@"kk",@"key2",@"ttwwdwd",@"name", nil] forKey:[NSString stringWithFormat:@"%i",5]];
NSArray *resultArray = [[mainDict allValues] filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"(key1 == %@) AND (key2==%@)", @"tt",@"vv"]];
NSLog(@"%@",resultArray);
答案 1 :(得分:6)
这很有效。您可以在此处设置自己的值。
NSArray *data = [NSArray arrayWithObjects:[NSMutableDictionary dictionaryWithObjects:[NSArray arrayWithObjects:@"ss",@"how", nil] forKeys:[NSArray arrayWithObjects:@"key1",@"key1", nil]],[NSMutableDictionary dictionaryWithObjects:[NSArray arrayWithObjects:@"tt",@"vv", nil] forKeys:[NSArray arrayWithObjects:@"key1",@"key2", nil]],[NSMutableDictionary dictionaryWithObjects:[NSArray arrayWithObjects:@"vv",@"tt", nil] forKeys:[NSArray arrayWithObjects:@"key1",@"key2", nil]],nil];
NSArray *filtered = [data filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"(key1 == %@) AND (key2==%@)", @"tt",@"vv"]];
NSLog(@"%@",filtered);
输出:
(
{
key1 = tt;
key2 = vv;
}
)
更清楚的解释:
NSMutableDictionary *dict4=[[NSMutableDictionary alloc]init];
[dict4 setObject:@"ss" forKey:@"key1"];
[dict4 setObject:@"how" forKey:@"key2"];
NSMutableDictionary *dict5=[[NSMutableDictionary alloc]init];
[dict5 setObject:@"tt" forKey:@"key1"];
[dict5 setObject:@"vv" forKey:@"key2"];
NSMutableDictionary *dict6=[[NSMutableDictionary alloc]init];
[dict6 setObject:@"vv" forKey:@"key1"];
[dict6 setObject:@"tt" forKey:@"key2"];
NSMutableArray *data = [[NSMutableArray alloc]init];
[data addObject:dict4];
[data addObject:dict5];
[data addObject:dict6];
NSArray *filtered = [data filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"(key1 == %@) AND (key2==%@)", @"tt",@"vv"]];
NSLog(@"%@",filtered);
输出:
(
{
key1 = tt;
key2 = vv;
}
)
答案 2 :(得分:2)
NSDictionary *d = [NSDictionary dictionaryWithObjectsAndKeys:
[NSArray arrayWithObjects:@"a", @"b", @"c", nil], @"a",
[NSArray arrayWithObjects:@"b", @"c", @"a", nil], @"b",
[NSArray arrayWithObjects:@"c", @"a", @"b", nil], @"c",
[NSArray arrayWithObjects:@"a", @"b", @"c", nil], @"d",
nil];
NSPredicate *p = [NSPredicate predicateWithFormat:@"%@[SELF][0] == 'a'", d];
NSLog(@"%@", p);
NSArray *keys = [d allKeys];
NSArray *filteredKeys = [keys filteredArrayUsingPredicate:p];
NSLog(@"%@", filteredKeys);
NSDictionary *matchingDictionary = [d dictionaryWithValuesForKeys:filteredKeys];
NSLog(@"%@", matchingDictionary);
尝试这对你真有帮助。
答案 3 :(得分:1)